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提供的登录签发的视图的更多相关文章

  1. Django REST Framework JWT 用户的登录注册

    安装配配置 pip install djangorestframework-jwt 配置setting ########### 1.在INSTALLED_APPS中加入'rest_framework. ...

  2. 6 Django REST framework JWT 和登录功能实现

    JWT 在用户注册或登录后,我们想记录用户的登录状态,或者为用户创建身份认证的凭证. 我们不再使用Session认证机制,而使用Json Web Token认证机制. Json web token ( ...

  3. Django REST framework JWT学习

    1.JWT学习 在用户注册或登录后,我们想记录用户的登录状态,或者为用户创建身份认证的凭证.我们不再使用Session认证机制,而使用Json Web Token认证机制. Json web toke ...

  4. 微信小程序登录对接Django后端实现JWT方式验证登录

    先上效果图 点击授权按钮后可以显示部分资料和头像,点击修改资料可以修改部分资料. 流程 1.使用微信小程序登录和获取用户信息Api接口 2.把Api获取的用户资料和code发送给django后端 3. ...

  5. Django rest framework集成微博第三方登录

    Django restframework 集成第三方登录(微博.微信.QQ等) 友情链接 python-social-auth-app官方文档 微博开放者平台 QQ开放者平台 准备工作 1.注册微博开 ...

  6. Django REST FrameWork中文教程3:基于类的视图

    我们也可以使用基于类的视图编写我们的API视图,而不是基于函数的视图.我们将看到这是一个强大的模式,允许我们重用常用功能,并帮助我们保持代码DRY. 使用基于类的视图重写我们的API 我们将首先将根视 ...

  7. JWT验证机制【刘新宇】【Django REST framework中使用JWT】

    JWT 在用户注册或登录后,我们想记录用户的登录状态,或者为用户创建身份认证的凭证.我们不再使用Session认证机制,而使用Json Web Token认证机制. 什么是JWT Json web t ...

  8. 用Django Rest Framework和AngularJS开始你的项目

    Reference: http://blog.csdn.net/seele52/article/details/14105445 译序:虽然本文号称是"hello world式的教程&quo ...

  9. Django REST FrameWork中文教程2:请求和响应

    从这一点开始,我们将真正开始覆盖REST框架的核心.我们来介绍几个基本的构建块. 请求对象REST框架引入了Request扩展常规的对象HttpRequest,并提供更灵活的请求解析.Request对 ...

随机推荐

  1. POJ3907:Build Your Home——题解

    http://poj.org/problem?id=3907 题目大意:求多边形面积,结果四舍五入. ———————————————————— 多边形面积公式板子题. #include<cstd ...

  2. BZOJ2938 & 洛谷2444:[POI2000]病毒——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=2938 https://www.luogu.org/problemnew/show/P2444 二进制 ...

  3. excel 列索引(数字)转列名

    function index2ColName($columnNumber) { $dividend = $columnNumber; while ($dividend > 0) { $modul ...

  4. android getpost代码

    GetPostUtil public class GetPostUtil { /** * 向指定URL发送GET方法的请求 * * @param url * 发送请求的URL * @param par ...

  5. 宽度搜索(BFS)中求最短路径问题理解记录

    借助ACM1242题深入理解迷宫类最短路径搜索并记录路径长度的问题及解决方法:这是初次接触优先队列,尤其是不知道该怎样去记忆在结构体重自定义大小比较的符号方向,很容易混淆符号向哪是从大到小排列,向哪是 ...

  6. Git版本管理1-安装配置和同步

    原文载于youdaonote,有图片: http://note.youdao.com/share/?id=79a2d4cae937a97785bda7b93cbfc489&type=note ...

  7. Babel 和 PostCss 的一些基本配置

    Babel 是一个javascript编译器,PostCSS 是一个样式转换工具.两者都可以看作是一个转化平台,我们可以在上面使用一些插件,来达到想要的代码转化.几乎每个前端项目都要使用它们. Bab ...

  8. redis.conf 配置

    daemonize yes #以后台daemon方式运行redis pidfile "/var/run/redis.pid" #redis以后台运行,默认pid文件路径/var/r ...

  9. mysql 可视化界面操作指令

    1.让自增长从新开始 ALTER TABLE users auto_increment =1;//让表中的自增长从新从0开始 2.条件查询 SELECT name from  users WHERE ...

  10. 【CC2530入门教程-02】CC2530的通用I/O端口输入和输出控制

    第2课  CC2530的通用I/O端口输入和输出控制 小蜜蜂科教 / 广东职业技术学院  欧浩源 [通用I/O端口视频教程:https://v.qq.com/x/page/x0793aol7us.ht ...