我一直在尝试使用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'))
但是,这始终会返回带有400
Bad request
我的问题是如何从我的桌面python应用程序中执行此操作。我基本上想要使用用户名和密码调用相同的API,并能够处理响应并访问受保护的API。
答案 0 :(得分:0)
requests.request的auth
参数默认为基本/摘要/自定义HTTP身份验证,类似于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"})
如果您愿意,可以使用data
参数将json
字典作为json提供(请求可能不同,但Django REST框架JWT的also supported)。
然后,您可以使用令牌(使用token = resp.json()['token']
提取)访问受限制的网址,如下所示:
requests.post(
'http://localhost:8000/some-personal-function/',
json={"foo": 42},
headers={'Authorization': 'JWT ' + token})
顺便看response.text
可能有助于找到原因,如果您的400
回复,则会包含以下内容:
'{“username”:[“此字段为必填项。”],“密码”:[“此字段为必填项。”]}'