桌面应用中的Django REST认证



我一直在尝试使用Django-REST认证来验证桌面应用程序中给出的用户名/密码。

在服务器端,我已经安装了以下DJANGO-REST-FRAMEWORK-JWT包:

https://github.com/GetBlimp/django-rest-framework-jwt

我已经遍历了这个示例,当我在命令行上运行以下命令时,得到一个令牌作为响应:

curl -X POST -d "username=luca&password=letmein123" http://localhost:8000/api-token-auth/

得到:

{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InBhbmthaiIsInVzZXJfaWQiOjIsImVtYWlsIjoiIiwiZXhwIjoxNDc5MTE5NzQ2fQ.RA085m-YSnGFheykCCxSVxI_9rW9AC9kEaOkUB5Gm0A"}

我试过这样做:

import requests
resp = requests.post('http://127.0.0.1:8000/api-token-auth/', data={}, auth=('luca', 'letmein123'))

然而,这总是返回响应码400Bad request

我的问题是如何从我的桌面python应用程序中做到这一点。我基本上想用用户名和密码调用相同的API,并能够处理响应和访问受保护的API。

请求的auth参数。request默认用于基本/摘要/自定义HTTP认证,类似于curl的-u, --user <user:password>参数。您可以定义自己的自定义Authentication类来实现所需的结果,但是实现与原始curl请求相同的结果的基本方法是:

resp = requests.post(
    'http://localhost:8000/api-token-auth/',
    data={"username": "luca", "password": "letmein123"})

如果你愿意,data字典也可以通过使用json参数作为json提供(请求会有所不同,但Django REST框架JWT也支持)。

然后可以使用令牌(用token = resp.json()['token']提取)访问受限制的url,如下所示:

requests.post(
    'http://localhost:8000/some-personal-function/',
    json={"foo": 42},
    headers={'Authorization': 'JWT ' + token})

顺便说一下,查看response.text可能有助于找到原因,在您的400响应的情况下,这将包含以下内容:

'{"username":["该字段是必需的。", password:["必填字段。"]} '

最新更新