我一直在尝试使用Django-REST身份验证来验证桌面应用程序中给定的用户名/password。
在服务器端,我安装了下面的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'))但是,这始终返回带有Bad request的响应代码400
我的问题是如何从我的桌面python应用程序中做到这一点。基本上,我希望使用用户名和密码调用相同的API,并能够处理响应和访问受保护的API。
发布于 2018-05-19 20:34:12
默认情况下,requests.request的auth参数用于Basic/Digest/Custom HTTP Auth,类似于curl的-u, --user <user:password>参数。您可以使用define your own custom Authentication class来获得所需的结果,但获得与原始curl请求相同的结果的基本方法是:
resp = requests.post(
'http://localhost:8000/api-token-auth/',
data={"username": "luca", "password": "letmein123"})如果您愿意,也可以使用json参数将data字典作为json提供(请求会有所不同,但由Django REST framework also supported提供)。
然后,您可以使用令牌(使用token = resp.json()['token']提取)来访问受限制的urls,如下所示:
requests.post(
'http://localhost:8000/some-personal-function/',
json={"foo": 42},
headers={'Authorization': 'JWT ' + token})顺便说一下,查看response.text可能有助于找到原因,在400响应的情况下,它将包含以下内容:
‘{“用户名”:“此字段必填。”,“密码”:“此字段必填。”}’
https://stackoverflow.com/questions/40586744
复制相似问题