[英]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.