Django REST Framework JWT提供的登录签发的视图
Django REST Framework JWT提供了一个视图。在我们登录的时候,会校验用户名、密码是否正确。如果信息无误,可以返回一个JWT token。就可以简单地实现了记录用户登录状态。
用法:
只需要在路由配置一下即可:
from rest_framework_jwt.views import obtain_jwt_token
urlpatterns=[
...
url(r'login$',obtain_jwt_token)
]
这样就可以实现登录之后,返回JWT token了。
至于obtain_jwt_token是怎么实现校验和返回JWT token的功能的呢?
可以看一下源码,我简单看了下,原理大体如下:
# 真正起作用的是ObtainJSONWebToken视图
obtain_jwt_token = ObtainJSONWebToken.as_view() # (点进ObtainJSONWebToken)
# ObtainJSONWebToken是一个DRF子类视图
class ObtainJSONWebToken(JSONWebTokenAPIView):
# JSONWebTokenSerializer先通过django的设置文件获取到用户的模型类,然后获取到模型类的用户名字段。然后自己建立一个序列化器,包括用户名、密码字段。
serializer_class = JSONWebTokenSerializer # (点进JSONWebTokenAPIView)
class JSONWebTokenAPIView(APIView):
def post(self, request, *args, **kwargs):
# 取得自己建立的序列化器
serializer = self.get_serializer(data=request.data)
# 校验成功后的操作
if serializer.is_valid():
user = serializer.object.get('user') or request.user
token = serializer.object.get('token')
# response_data就是返回的数据。
response_data = jwt_response_payload_handler(token, user, request)
response = Response(response_data)
...
...
return response return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) # (搜索jwt_response_payload_handler)
# 可以看到jwt_response_payload_handler返回一个字典,包含着JWT token
def jwt_response_payload_handler(token, user=None, request=None):
"""
Returns the response data for both the login and refresh views.
Override to return a custom response such as including the
serialized representation of the User. Example: def jwt_response_payload_handler(token, user=None, request=None):
return {
'token': token,
'user': UserSerializer(user, context={'request': request}).data
} """
return {
'token': token
}
这就是实现登录后自动返回token的原理。
需求&解决
现在有一个需求,登录成功后,不仅仅返回JWT token,还要返回username和user_id。应该怎么修改呢?
如果认真看上面的源码,其实已经知道怎么解决了。
就是重写33行的jwt_response_payload_handler函数。
def jwt_response_payload_handler(token,user=None,request=None):
return {
"token":token,
"id":user.id,
"username":user.username
}
因为重写了方法,要应用我们自定义的方法,需要在django上进行设置。
JWT_AUTH = {
...
'JWT_RESPONSE_PAYLOAD_HANDLER': 'user.utils.jwt_response_payload_handler', # 应用登录返回token的自定义方法
}
Django REST Framework JWT提供的登录签发的视图的更多相关文章
- Django REST Framework JWT 用户的登录注册
安装配配置 pip install djangorestframework-jwt 配置setting ########### 1.在INSTALLED_APPS中加入'rest_framework. ...
- 6 Django REST framework JWT 和登录功能实现
JWT 在用户注册或登录后,我们想记录用户的登录状态,或者为用户创建身份认证的凭证. 我们不再使用Session认证机制,而使用Json Web Token认证机制. Json web token ( ...
- Django REST framework JWT学习
1.JWT学习 在用户注册或登录后,我们想记录用户的登录状态,或者为用户创建身份认证的凭证.我们不再使用Session认证机制,而使用Json Web Token认证机制. Json web toke ...
- 微信小程序登录对接Django后端实现JWT方式验证登录
先上效果图 点击授权按钮后可以显示部分资料和头像,点击修改资料可以修改部分资料. 流程 1.使用微信小程序登录和获取用户信息Api接口 2.把Api获取的用户资料和code发送给django后端 3. ...
- Django rest framework集成微博第三方登录
Django restframework 集成第三方登录(微博.微信.QQ等) 友情链接 python-social-auth-app官方文档 微博开放者平台 QQ开放者平台 准备工作 1.注册微博开 ...
- Django REST FrameWork中文教程3:基于类的视图
我们也可以使用基于类的视图编写我们的API视图,而不是基于函数的视图.我们将看到这是一个强大的模式,允许我们重用常用功能,并帮助我们保持代码DRY. 使用基于类的视图重写我们的API 我们将首先将根视 ...
- JWT验证机制【刘新宇】【Django REST framework中使用JWT】
JWT 在用户注册或登录后,我们想记录用户的登录状态,或者为用户创建身份认证的凭证.我们不再使用Session认证机制,而使用Json Web Token认证机制. 什么是JWT Json web t ...
- 用Django Rest Framework和AngularJS开始你的项目
Reference: http://blog.csdn.net/seele52/article/details/14105445 译序:虽然本文号称是"hello world式的教程&quo ...
- Django REST FrameWork中文教程2:请求和响应
从这一点开始,我们将真正开始覆盖REST框架的核心.我们来介绍几个基本的构建块. 请求对象REST框架引入了Request扩展常规的对象HttpRequest,并提供更灵活的请求解析.Request对 ...
随机推荐
- Android 动画之View动画效果和Activity切换动画效果
View动画效果: 1.>>Tween动画通过对View的内容进行一系列的图形变换(平移.缩放.旋转.透明度变换)实现动画效果,补间动画需要使用<set>节点作为根节点,子节点 ...
- BZOJ1022 [SHOI2008]小约翰的游戏John 【博弈论】
1022: [SHOI2008]小约翰的游戏John Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3014 Solved: 1914 [Submi ...
- ContestHunter暑假欢乐赛 SRM 02
惨不忍睹 3个小时都干了些什么... 日常按顺序从A题开始(难度居然又不是递增的 第一眼A题就觉得很简单...写到一半才发现woc那是个环.感觉一下子复杂了,按照链的方法扩展的话要特判很多东西... ...
- NOIP2018普及&提高题解
第一次考$NOIP$的我已经自闭了 $CCF$告诉我们了一件事情,要对自己写的程序有信仰,相信$CCF$的数据是水的 普及组: 分数:$100+100+30+100=330$ $1.titile$: ...
- 【P2602】【ZJOI2012】数字计数
传送门 Description 给定两个正整数\(a\)和\(b\),求在\([a,b]\)中的所有整数中,每个数码(\(digit\))各出现了多少次. Input 两个正整数\(a,b\) Out ...
- JavaScript倒计时脚本
JavaScript倒计时在Web中用得非常广泛,比如常见的团购啊.还有什么值得期待的事情,都可以用到倒计时.现在举了四个例子,比如时间长的倒计时,小时倒计时,最简的倒计时,还有秒表等等,应该可以满足 ...
- 仅此一文让你明白ASP.NET MVC 之Model的呈现
本文目的 我们来看一个小例子,在一个ASP.NET MVC项目中创建一个控制器Home,只有一个Index: public class HomeController : Controller { pu ...
- java.lang包学习(转自微学苑)
Java语言包(java.lang)定义了Java中的大多数基本类,由Java语言自动调用,不需要显示声明.该包中包含了Object类,Object类是整个类层次结构的根结点,同时还定义了基本数据类型 ...
- Codeforces Round #401 (Div. 2) A B C 水 贪心 dp
A. Shell Game time limit per test 0.5 seconds memory limit per test 256 megabytes input standard inp ...
- 学习tcpIp必备的抓包工具wireshark
wireshark是一个优秀的抓包工具 ip.src=192.168.10.123 发送http的一端 ip.dst=192.168.10.126 接收http的一端 如下图所示: