首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自桌面应用的Django REST身份验证

来自桌面应用的Django REST身份验证
EN

Stack Overflow用户
提问于 2016-11-14 18:38:12
回答 1查看 566关注 0票数 0

我一直在尝试使用Django-REST身份验证来验证桌面应用程序中给定的用户名/password。

在服务器端,我安装了下面的DJANGO-REST-FRAMEWORK-JWT包,可以在这里找到:

代码语言:javascript
复制
https://github.com/GetBlimp/django-rest-framework-jwt

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

代码语言:javascript
复制
curl -X POST -d "username=luca&password=letmein123" http://localhost:8000/api-token-auth/

我得到了:

代码语言:javascript
复制
{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InBhbmthaiIsInVzZXJfaWQiOjIsImVtYWlsIjoiIiwiZXhwIjoxNDc5MTE5NzQ2fQ.RA085m-YSnGFheykCCxSVxI_9rW9AC9kEaOkUB5Gm0A"}

我试过这样的方法:

代码语言:javascript
复制
import requests
resp = requests.post('http://127.0.0.1:8000/api-token-auth/', data={}, auth=('luca', 'letmein123'))

但是,这始终返回带有Bad request的响应代码400

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

EN

回答 1

Stack Overflow用户

发布于 2018-05-19 20:34:12

默认情况下,requests.requestauth参数用于Basic/Digest/Custom HTTP Auth,类似于curl的-u, --user <user:password>参数。您可以使用define your own custom Authentication class来获得所需的结果,但获得与原始curl请求相同的结果的基本方法是:

代码语言:javascript
复制
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,如下所示:

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

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

‘{“用户名”:“此字段必填。”,“密码”:“此字段必填。”}’

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40586744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档