簡體   English   中英

沒有Model / Serializer的Django / Python POST API

[英]Django / Python POST API without Model/Serializer

我想創建一個只有一個端點的非常簡單的API。 我想向API發送json,例如:{“ provider”:“ com.facebook.orca”,“ code”:“ 1”,“ color”:“ #FFFFF”}

然后,我想使用python庫來控制房間中的設備(python-yeelight)。 我想將其與Auth令牌或用戶名/密碼驗證一起使用。

我在Django Rest Framework上發現的內容太復雜,無法滿足我的需要(即接受POST並返回“成功”或“失敗”消息。

謝謝!

您可以創建方法裝飾器以實現基本身份驗證。 使用此裝飾器包裝所有django視圖。

def token_required(function):
    def wrap(request, *args, **kwargs):
        auth_token = request.META.get('HTTP_AUTHORIZATION_TOKEN')
        if auth_token:
            try:
                token = Tokens.objects.get(token=auth_token)
                user = token.user
            except Tokens.DoesNotExist:
                user=None
        else:
            r = {
                    'status': -1,
                    'message': 'Please provide a valid token.'
                }
            return HttpResponse(json.dumps(r), content_type="application/json")
        if user:
            request.user = user
            return function(request, *args, **kwargs)
        else:
            r = {
                        'status': -2,
                        'message': 'User not Authorised, Please login'
                }
            return HttpResponse(json.dumps(r), content_type="application/json")
    return wrap

現在,您的所有請求都必須包含一個標頭,如下所示,此標頭包含此裝飾器包裝的視圖,以檢測視圖內的用戶。

AUTHORIZATION-TOKEN:some_token_value

您的令牌模型將如下所示。

class Tokens(models.Model):
    user = models.OneToOneField(User, related_name="tokens",null=False)
    token = models.CharField(max_length=255, unique=True)

    def save(self, *args, **kwargs):
        if self.token is None or self.token == "":
            import uuid
            self.token=uuid.uuid4().hex
        super(Tokens, self).save(*args, **kwargs)

裝飾器的使用示例:

@csrf_exempt
@token_required
def your_view(request):
    pass

我想這應該可以幫助您。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM