自定义Django_rest_framework_jwt登陆错误返回的解决


Posted in Python onOctober 18, 2020

在使用Django做前端后端项目时,登陆认证方法往往使用的是jwt_token,但是想自定义登陆成功和失败的返回体。

1.当用户名和密码正确就会生成token,返回response是调用的是JWT_RESPONSE_PAYLOAD_HANDLER,如果想自定义返回体就需要重写jwt_response_payload_handler函数。

在项目目录下settings.py中,添加JWT_RESPONSE_PAYLOAD_HANDLER

JWT_AUTH = {
  'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=6000),
  'JWT_RESPONSE_PAYLOAD_HANDLER': 'Users.views.jwt_response_payload_handler',  # 后面跟着你视图里定义函数
}

自定义一个视图编辑jwt_response_payload_handler

def jwt_response_payload_handler(token, user=None, request=None):
  """
  设置jwt登陆返回的格式
  :param token:
  :param user:
  :param request:
  :return:
  """
  return {
    "msg": "success",
    "status": 200,
    "data": [{
    	# data自定义你接口想返回的信息
      'token': token,
      'username': user.username
    }]
  }

现在的效果如下:

自定义Django_rest_framework_jwt登陆错误返回的解决 

2. Django中jwt错误返回的是{"non_field_errors":["无法使用提供的认证信息登录。"]},当用户名或密码错误时,是不会去调用jwt_response_payload_handler,那么失败时调用的是什么函数了,JWT_RESPONSE_PAYLOAD_ERROR_HANDLER,但是发现这个方法并没有合到master分支,那么我们就需要手动给他合并进去。

我们打开/usr/local/lib/python3.6/site-packages/rest_framework_jwt/settings.pyIMPORT_STRINGS中添加JWT_RESPONSE_PAYLOAD_ERROR_HANDLER:

自定义Django_rest_framework_jwt登陆错误返回的解决

/usr/local/lib/python3.6/site-packages/rest_framework_jwt/views.py中修改:

自定义Django_rest_framework_jwt登陆错误返回的解决

我们在自己的视图里编写一个jwt_response_payload_error_handler函数

def jwt_response_payload_error_handler(serializer, request = None):
  return {
    "msg": "用户名或者密码错误",
    "status": 400,
    "detail": serializer.errors
  }

最后我们在我们项目的settings.pyJWT中添加错误返回的函数:

# jwt_token配置
JWT_AUTH = {
  'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=6000),
  # 登陆成功自定义 的返回结构
  'JWT_RESPONSE_PAYLOAD_HANDLER': 'Users.views.jwt_response_payload_handler',
  # 登陆失败时自定义的返回结构
  'JWT_RESPONSE_PAYLOAD_ERROR_HANDLER': 'Users.views.jwt_response_payload_error_handler',
}

最后的样子就成为这样:

自定义Django_rest_framework_jwt登陆错误返回的解决

到此这篇关于自定义Django_rest_framework_jwt登陆错误返回的解决的文章就介绍到这了,更多相关Django_rest_framework_jwt登陆错误内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python开发中module模块用法实例分析
Nov 12 Python
一个基于flask的web应用诞生 使用模板引擎和表单插件(2)
Apr 11 Python
python3.4下django集成使用xadmin后台的方法
Aug 15 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
May 04 Python
Python使用type关键字创建类步骤详解
Jul 23 Python
python3 selenium自动化测试 强大的CSS定位方法
Aug 23 Python
django框架单表操作之增删改实例分析
Dec 16 Python
Python读取表格类型文件代码实例
Feb 17 Python
python实现处理mysql结果输出方式
Apr 09 Python
Python轻量级web框架bottle使用方法解析
Jun 13 Python
Python实现小黑屋游戏的完整实例
Jan 06 Python
Python机器学习三大件之一numpy
May 10 Python
如何利用python读取micaps文件详解
Oct 18 #Python
Python中Yield的基本用法
Oct 18 #Python
Anaconda+spyder+pycharm的pytorch配置详解(GPU)
Oct 18 #Python
Python通过format函数格式化显示值
Oct 17 #Python
Python如何使用vars返回对象的属性列表
Oct 17 #Python
Python使用eval函数执行动态标表达式过程详解
Oct 17 #Python
Python基于locals返回作用域字典
Oct 17 #Python
You might like
php PDO中文乱码解决办法
2009/07/20 PHP
php 静态属性和静态方法区别详解
2017/04/09 PHP
JS的replace方法详细介绍
2012/11/09 Javascript
IE关闭时判断及AJAX注销案例学习
2013/02/18 Javascript
ajax请求get与post的区别总结
2013/11/04 Javascript
jQuery实现的网页左侧在线客服效果代码
2015/10/23 Javascript
JavaScript判断数组重复内容的两种方法(推荐)
2016/06/06 Javascript
JS原型链 详解及示例代码
2016/09/06 Javascript
easyui-combobox 实现简单的自动补全功能示例
2016/11/08 Javascript
如何通过非数字与字符的方式实现PHP WebShell详解
2017/07/02 Javascript
Echart折线图手柄触发事件示例详解
2018/12/16 Javascript
Angular中innerHTML标签的样式不起作用的原因解析
2019/06/18 Javascript
详解JWT token心得与使用实例
2019/08/02 Javascript
Vue实现开关按钮拖拽效果
2020/09/22 Javascript
[01:01:41]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第二场 1月31日
2021/03/11 DOTA
Python使用chardet判断字符编码
2015/05/09 Python
Python实现读写sqlite3数据库并将统计数据写入Excel的方法示例
2017/08/07 Python
numpy使用技巧之数组过滤实例代码
2018/02/03 Python
Flask框架URL管理操作示例【基于@app.route】
2018/07/23 Python
解决Python找不到ssl模块问题 No module named _ssl的方法
2019/04/29 Python
如何更改 pandas dataframe 中两列的位置
2019/12/27 Python
Python中logging日志库实例详解
2020/02/19 Python
使用python客户端访问impala的操作方式
2020/03/28 Python
django-orm F对象的使用 按照两个字段的和,乘积排序实例
2020/05/18 Python
pygame用blit()实现动画效果的示例代码
2020/05/28 Python
打架检讨书500字
2014/01/29 职场文书
大学军训感言1000字
2014/02/25 职场文书
公司周年庆典策划方案
2014/05/17 职场文书
党的群众路线个人对照检查材料
2014/09/23 职场文书
上课说话检讨书
2015/01/27 职场文书
销售工作决心书
2015/02/04 职场文书
2015年医院护理部工作总结
2015/04/23 职场文书
小学班主任研修日志
2015/11/13 职场文书
《我们的民族小学》教学反思
2016/02/19 职场文书
2019各种承诺书范文
2019/06/24 职场文书
Go缓冲channel和非缓冲channel的区别说明
2021/04/25 Golang