rest_framework11:jwt简单例子/自定制基于jwt认证类

jwt简单例子

一、登陆设置

1.不需要写login的视图类,使用jwt内置的。

2.需要前置条件,已有继承AbstractUser models,并且有数据,用于校验,返回token。

urls.py

from rest_framework_jwt.views import obtain_jwt_tokenurlpatterns = [path('login/', obtain_jwt_token),...
]

 二、访问视图类设置

需要两者搭配,才能校验

    authentication_classes = [JSONWebTokenAuthentication,]# 权限控制permission_classes = [IsAuthenticated,]

urls.py

urlpatterns = [path('login/', obtain_jwt_token),path('orderview/', views.OrderAPIView.as_view()),path('userinfo/', views.UserInfoAPIView.as_view()),]

views.py

from rest_framework.views import APIView
from rest_framework.response import Response# 使用jwt 提供的认证类,局部使用
from rest_framework_jwt.authentication import JSONWebTokenAuthentication# 内置权限类
from rest_framework.permissions import IsAuthenticated# 但设定权限,登陆才能访问。
class OrderAPIView(APIView):authentication_classes = [JSONWebTokenAuthentication,]# 权限控制permission_classes = [IsAuthenticated,]def get(self,request):return Response('这是订单信息')class UserInfoAPIView(APIView):authentication_classes = [JSONWebTokenAuthentication,] # 可以理解成,全局设定了,游客可以访问。def get(self,request):return Response('这是UserInfoAPIView')

自定制基于jwt认证类

一、控制接口返回的数据格式

utils.py

def My_jwt_response_payload_handler(token, user=None, request=None):return {'token': token,'msg':'登录成功','status':100,'username':user.username}

settings.py

JWT_AUTH={'JWT_RESPONSE_PAYLOAD_HANDLER':'app02.utils.My_jwt_response_payload_handler'
}

二、自定义基于jwt的权限类

因为是自己定制的,所以可以返回错误信息,当没有携带token字段。这是与上面“jwt简单例子”的区别。

1.自定义验证。

utils.py

from rest_framework_jwt.authentication import BaseAuthentication
from rest_framework_jwt.authentication import BaseJSONWebTokenAuthentication
from rest_framework.exceptions import AuthenticationFailed
# from rest_framework_jwt.authentication import jwt_decode_handler
from rest_framework_jwt.utils import jwt_decode_handler  # 与上面是一个
import jwt
from api import models# class MyJwtAuthentication(BaseAuthentication):
#     def authenticate(self, request):
#         jwt_value = request.META.get('HTTP_AUTHORIZATION')
#         if jwt_value:
#             try:
#                 # jwt 提供了通过三段token,取出payload的方法,并且有校验功能
#                 payload = jwt_decode_handler(jwt_value)
#
#             except jwt.ExpiredSignature:
#                 raise AuthenticationFailed('签名过期')
#             except jwt.InvalidTokenError:
#                 raise AuthenticationFailed('用户非法')
#             except Exception as e:
#                 raise AuthenticationFailed(str(e))
#
#             # 因为payload 就是用户信息字典
#             print(payload)
#             # 第一种,去数据库查
#             # user=models.User.objects.get(pk=payload.get('user_id'))
#             # 第二种,不查数据库
#             user=models.User(id=payload.get('user_id'),username=payload.get('username'))
#             return user,jwt_value
#         # 没有值,直接抛异常
#         raise AuthenticationFailed('没有携带认证信息')# 基于BaseJSONWebTokenAuthentication
# 可以使用内置方法获取user
class MyJwtAuthentication(BaseJSONWebTokenAuthentication):def authenticate(self, request):jwt_value = request.META.get('HTTP_AUTHORIZATION')if jwt_value:try:# jwt 提供了通过三段token,取出payload的方法,并且有校验功能payload = jwt_decode_handler(jwt_value)except jwt.ExpiredSignature:raise AuthenticationFailed('签名过期')except jwt.InvalidTokenError:raise AuthenticationFailed('用户非法')except Exception as e:raise AuthenticationFailed(str(e))# 因为payload 就是用户信息字典user=self.authenticate_credentials(payload)return user,jwt_value# 没有值,直接抛异常raise AuthenticationFailed('没有携带认证信息')

2.视图类

#
from app02.utils import MyJwtAuthentication
class GoodsInfoAPIView(APIView):authentication_classes = [MyJwtAuthentication,]def get(self,request,*args,**kwargs):print(request.user)return Response('商品信息')

3.urls.py

path('goods/', views.GoodsInfoAPIView.as_view()),

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/280406.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java各种数据类型,自己学习写的笔记!!!

java编程规范: 1.良好的标识符的命名保留字不能作为标识符命名: class、public、static..., goto,const区分大小写:helloWorld、HelloWorld 2.良好的注释习惯 3.良好的缩进:没遇到一个代码块缩进一次(一个tab键&…

Java Decompiler(Java反编译工具)

Java Decompiler官网地址:http://jd.benow.ca/ 官网介绍: The “Java Decompiler project” aims to develop tools in order to decompile and analyze Java 5 “byte code” and the later versions. JD-Core is a library that reconstructs Java sou…

20位程序员关于求职的疑问,以及我给出的参考答案

作者:陆小凤首发:公众号【程序员江湖】阅读本文大概需要 6 分钟。前几天发了一条朋友圈对于求职小伙伴们提出的问题,我进行了收集整理,统一反馈。也许这20个问题也是你们遇到的问题,所以趁着年前赶紧把它发出来。以下2…

MassTransit | 基于MassTransit Courier 实现 Saga 编排式分布式事务

Saga 模式Saga 最初出现在1987年Hector Garcaa-Molrna & Kenneth Salem发表的一篇名为《Sagas》的论文里。其核心思想是将长事务拆分为多个短事务,借助Saga事务协调器的协调,来保证要么所有操作都成功完成,要么运行相应的补偿事务以撤消先…

ccleaner无法更新_CCleaner正在静默更新关闭自动更新的用户

ccleaner无法更新CCleaner is forcing updates on users who specifically opt out of automatic updates. Users will only find out about these unwanted updates when they check the version number. CCleaner强制对专门选择退出自动更新的用户进行更新。 用户只有在检查版…

查找域内所有的Windows Server 2012 R2的服务器,并区分出哪些是物理机,那些是虚拟机...

通过使用Get-Adcomputer和Get-Wmiobject 组合来实现。思路是这样的,先看一台服务器的属性值有什么可用利用的。[12r2-dc]: PS C:\> Get-ADComputer -Identity 12r2-dc -Properties *AccountExpirationDate :accountExpires …

rest_framework12:多登陆方式与自动签发token/配置过期时间

多登陆方式与自动签发token views.py 1.继承Viewset,方法里可以使用自定义login,更直观。需要路由直接配置请方式 2. 序列化是直接对request数据处理,并从对象中获取token 3.context可以储存自定义数据 # 多登陆方式,自动签发…

20165310_获奖感想与Java阶段性学习总结

获奖感想与Java阶段性学习总结 一、Learning By Doing ​ 在此之前,其实我并没有想到能够成为小黄杉的第一批成员之一,喜悦之余,也感受到了许多的压力。小黄杉一方面代表了老师对于我这一阶段学习成果的肯定,但同时也是对我的督促…

chrome浏览器崩溃_不只是您:Chrome浏览器在Windows 10的2018年4月更新中崩溃

chrome浏览器崩溃If your computer is hanging or freezing after installing the Windows 10 April 2018 Update you’re not alone, and Microsoft is aware of the problem. 如果在安装Windows 10 April 2018 Update之后计算机挂起或死机,您并不孤单,…

读名老中医之路笔记(二)

任应秋:我的治学门径和方法 任应秋先生从幼读经,十三经皆能成诵,属于带童子功的医学家,他的医学经验: 一、读经宜读全本,解经宜先识字,读经宜正音读,强调对经典著作的朗读和背诵&…

致敬青春岁月

昨天发生的一件神奇的事情。我们公司工会组织了一次小型的户外团建,有机会认识一些其他部门同事,没想到有一个同事小心地认出了我,然后还谈起了关于.NET技术和社区的一些发展的历史和故事。他在微软工作的时间比我久,但时空交错&a…

谈谈- declare-styleable属性

在Android开发中,往往要用到自定义的控件来实现我们的需求或效果。在使用自定义 控件时,难免要用到自定义属性,那怎么使用自定义属性呢? 一、简单使用: 1.在文件res/values/下新建attrs.xml属性文件,中定义…

docker:自定义ubuntu/制作镜像引用/ubuntu换源更新

一、需求 1. 制作一个图像辨识的api,用到相同设置的ubuntu镜像,但是每次制作都要更新ubuntu和下载tesseract浪费半个到一个小时下载,所以制作一个自定义ubuntu几次镜像大大提高开发效率。 2. 制作ubuntu过程时,可以调试tesserac…

jQuery 属性和CSS

HTML代码&#xff1a; <div id"div1">div1<p>1</p><p>2</p><p>3</p> </div> <div id"div2">div2</div> <div id"div3">div3</div>attr()设置节点的属性 $("#div1…

facebook人脸照片_为什么您的Facebook照片看起来如此糟糕(以及您可以如何做)...

facebook人脸照片Facebook is a popular platform for sharing photos, even though it’s not a very good one. They prioritize fast loading images over high quality ones. You can’t stop it from happening, but you can minimize the quality loss. Facebook是一个受…

用C#自己动手写个操作系统,爽!

自从C#的AOT编译机制发布以来&#xff0c;有趣的项目越来越多&#xff0c;今天给大家推荐一个开源项目&#xff0c;用C#开发的64位操作系统。项目简介这是一个使用.NET Native AOT技术编译的C# 64位操作系统&#xff0c;系统的基础功能基本都已经支持&#xff1a;网卡、多处理、…

JavaFX 学习笔记——窗口与控件

前言 如今比较流行的桌面gui框架有WPF、WinForm、Qt、javafx等。其中WPF和WinForm目前还只能在运行Winsows上。Qt(widget)是一个很强大的跨平台C框架(不只是UI)&#xff0c;但用C写界面实在有点蛋疼&#xff0c;且编译出来的体积很大。 JavaFX是基于JAVA的开源桌面框架&#xf…

Linux 用户名、主机添加背景色

文章参考&#xff1a;PS1应用之——修改linux终端命令行各字体颜色 Linux 用户名、主机添加背景色&#xff0c;用于生产环境&#xff0c;这样可以减少人为的误操作。 1 [rootzhang ~]# tail /etc/bashrc 2 ……………… 3 export PS1"\[\e[37;40m\][\[\e[37;41m\]\u\[\e[3…

python 调用文件上传图片简单例子

使用方法&#xff1a; python.exe .\test.py "fileD:\img\mark_1080.png" "matchWordListRUN" "urlhttp://192.168.0.37:8081/templateMatch" test.py import requests import sysif __name__ "__main__":print(参数个数为:, len(s…

解决网站在负载均衡环境下SESSION丢失的问题

在WEB场中,动态网页往往会因为几台主机做了负载而产生SESSION丢失的问题&#xff0c;网上也有很多的介绍&#xff0c;我这里只将我经历的过程给大家分享一下&#xff1a; 系统要运行在负载平衡的 Web 场环境中&#xff0c;而系统配置文件web.config中的Session状态却设置为InPr…