[英]Django / Python POST API without Model/Serializer
I want to create a very simple API, with only one endpoint. 我想创建一个只有一个端点的非常简单的API。 I want to send to an API a json like : {"provider" : "com.facebook.orca", "code" : "1", "color" : "#FFFFF" } 我想向API发送json,例如:{“ provider”:“ com.facebook.orca”,“ code”:“ 1”,“ color”:“ #FFFFF”}
Then, I want to use a python library to control a device in my room(python-yeelight). 然后,我想使用python库来控制房间中的设备(python-yeelight)。 I want to use this with a Auth token or a username/password authenticate. 我想将其与Auth令牌或用户名/密码验证一起使用。
What I found on Django Rest Framework was way too complicated for what I need(which is accepting a POST and returning a "success" or "failure" message. 我在Django Rest Framework上发现的内容太复杂,无法满足我的需要(即接受POST并返回“成功”或“失败”消息。
Thank you! 谢谢!
You can create a method decorator to implement basic authentication. 您可以创建方法装饰器以实现基本身份验证。 Wrap all your django views using this decorator. 使用此装饰器包装所有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
Now all your requests must contain a header as shown below to views wrapped by this decorator to detect the user inside views. 现在,您的所有请求都必须包含一个标头,如下所示,此标头包含此装饰器包装的视图,以检测视图内的用户。
AUTHORIZATION-TOKEN : some_token_value AUTHORIZATION-TOKEN:some_token_value
Your tokens model will look something like as shown below. 您的令牌模型将如下所示。
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)
Sample use of decorator: 装饰器的使用示例:
@csrf_exempt
@token_required
def your_view(request):
pass
I guess this should help you out. 我想这应该可以帮助您。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.