我想创建一个非常简单的API,只有一个端点。 我想发送一个像json的API: {“provider”:“com.facebook.orca”, “code”:“1”, “颜色”:“#FFFFF” }
然后,我想使用python库来控制我房间的设备(python-yeelight)。我想使用Auth令牌或用户名/密码进行身份验证。
我在Django Rest Framework上发现的东西太复杂了我所需要的东西(接受POST并返回“成功”或“失败”的消息。
谢谢!
答案 0 :(得分:1)
您可以创建方法装饰器来实现基本身份验证。使用此装饰器包装所有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
我想这应该会帮助你。