我是Django的新手,请多多包涵。
我有以下看法
@csrf_exempt
@api_view(http_method_names=['POST'])
def login_agro_user(request):
request_data = request.data
if not request_data:
return Response({"status_code": 400})
secret = request_data.get('secret')
if secret != 'test':
return Response({"status_code": 400})
payload = request_data.get('payload')
payload = json.loads(base64.b64decode(payload).decode('utf-8'))
serializer = AgroUserSerializer(data=payload)
if serializer.is_valid():
query = AgroUser.objects.filter(user_guid=payload['user_guid'])
if not query:
serializer.save()
elif query[0].active == False:
query.update(active=True)
key = secrets.token_urlsafe()
query.update(key=key)
response_data = {"callback": f"{settings.FRONT_BASE_URL}/{key}"}
return Response(response_data)
return Response({"status_code": 400})
此视图似乎链接到以下端点
urlpatterns = [
path('', admin.site.urls),
url(r'^api/v1/login_agro_user', login_agro_user),
代码应生成令牌,例如zLdu6NrHnvyUnixnvV-PiaQwro4QSNp0MaRmYQ9W09c
。
但是
我的问题如下:
欢迎大家的帮助,因为我失去理智了。
谢谢。
答案 0 :(得分:1)
不确定这是答案,但是您可以这样调用方法:
curl -XPOST 0:8000/api/v1/login_agro_user -H "Content-Type: application/json" -d '{"secret": "test", "payload": "eyJmaXJzdF9uYW1lIjogIkpvaG4iLCAibGFzdF9uYW1lIjogIkRvZSIsICJlbWFpbCI6ICJmb29AZXhhbXBsZS5jb20iLCAiYWN0aXZlIjogdHJ1ZSwgImtleSI6ICJzZWNyZXQifQ=="}'
要创建适当的有效负载,您可以使用:
>>> import base64
>>> import json
>>> base64.b64encode(json.dumps({"first_name": "John", "last_name": "Doe", "email": "foo@example.com", "active": True, "key": "secret"}).encode('utf8'))
b'eyJmaXJzdF9uYW1lIjogIkpvaG4iLCAibGFzdF9uYW1lIjogIkRvZSIsICJlbWFpbCI6ICJmb29AZXhhbXBsZS5jb20iLCAiYWN0aXZlIjogdHJ1ZSwgImtleSI6ICJzZWNyZXQifQ=='