没有Model / Serializer的Django / Python POST API

时间:2017-04-21 14:11:27

标签: python django python-2.7 post

我想创建一个非常简单的API,只有一个端点。 我想发送一个像json的API: {“provider”:“com.facebook.orca”, “code”:“1”, “颜色”:“#FFFFF” }

然后,我想使用python库来控制我房间的设备(python-yeelight)。我想使用Auth令牌或用户名/密码进行身份验证。

我在Django Rest Framework上发现的东西太复杂了我所需要的东西(接受POST并返回“成功”或“失败”的消息。

谢谢!

1 个答案:

答案 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

我想这应该会帮助你。