如何在Django中运行该视图?

时间:2019-05-16 15:33:46

标签: python django

我是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

但是

我的问题如下:

  • 该视图应出现在哪里?
  • 如果要创建令牌,是否应该以独立模式运行视图?

欢迎大家的帮助,因为我失去理智了。

谢谢。

1 个答案:

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