DRF框架之认证组件用法(第四天)
1. 什么是drf 框架的认证组件: auth 就等于是jango中的Auth模块,Auth是自带session信息,但是 drf的认证组件可以自定义token携带过去,去判断用的
2.如何实现认证呢?
from rest_framework.authentication import BaseAuthentication
from app01 import models
from rest_framework.exceptions import AuthenticationFailed
class MyAuthetication(BaseAuthentication):
#重写这个方法
def authenticate(self,request):
#认证相关的东西 #如果token信息放到请求头中,如何取?
# request._request.META
# token=request.META.get('token') # 校验该次请求是否携带正确的token
#取出token
token=request.GET.get('token')
#校验该次请求是否携带正确的token
ret=models.UserToken.objects.filter(token=token).first()
if ret:
#正常通过认证的用户
#ret.user 当前登录用户
return ret.user,token
# return None
else:
#没有登录或者非法用户
raise AuthenticationFailed('您没有通过认证')
判断用户登录携带的token是否正确
3. 如何在登录的时候加载认证信息处理是否是正常的用户
#写登录接口
class Login(APIView):
#全局使用的局部禁用
authentication_classes = []
def post(self,request):
response={'status':100,'msg':None}
name=request.data.get('name')
pwd=request.data.get('pwd')
#去数据库校验该用户是否存在
user=models.User.objects.filter(name=name,pwd=pwd).first()
if user:
#正常用户登录成功
#返回一个唯一的随机字符串
token=uuid.uuid4()
#把生成的随机字符串存到数据库中
# 这样不行,因为每次登录都会新插入一条
# models.UserToken.objects.create(user=user,token=token)
# 先去数据库中查询,如果当前用户存在记录,更新token,如果不存在,新增一条
# 根据user取查询,如果查到数据,更新defaults中的数据,如果查不到,新增一条数据
ret=models.UserToken.objects.update_or_create(user=user,defaults={'token':token})
response['msg']='登录成功'
response['token']=token
else:
#用户名或密码错误
response['status'] = 101
response['msg'] = '用户名或密码错误'
return Response(response)
简单的登录加载认证处理
4. 如何全局使用呢?
# 认证的全局配置
REST_FRAMEWORK={
'DEFAULT_AUTHENTICATION_CLASSES':['app01.MyAuth.MyAuthetication',], }
5. 如何全局禁用,局部使用呢?
#写登录接口
class Login(APIView):
#全局使用的局部禁用
authentication_classes = [MyAuthetication]
def post(self,request):
DRF框架之认证组件用法(第四天)的更多相关文章
- 【DRF框架】认证组件
DRF框架的认证组件 核心代码: self.perform_authentication(request) 框架自带模块: from rest_framework import a ...
- 第四章、drf框架 - 三大认证组件 | 认证组件 | 权限组件 | 频率组件
目录 RBAC 基于用户权限访问控制的认证 - Role-Based Access Control 三大认证组件 源码分析 一.认证组件 自定义认证类 使用: 二.权限组件 自定义权限类 三.频率组件 ...
- drf框架 - 三大认证组件 | 认证组件 | 权限组件 | 频率组件
RBAC 基于用户权限访问控制的认证 - Role-Based Access Control Django框架采用的是RBAC认证规则,RBAC认证规则通常会分为 三表规则.五表规则,Django采用 ...
- drf框架中认证与权限工作原理及设置
0909自我总结 drf框架中认证与权限工作原理及设置 一.概述 1.认证 工作原理 返回None => 游客 返回user,auth => 登录用户 抛出异常 => 非法用户 前台 ...
- drf框架中分页组件
drf框架中分页组件 普通分页(最常用) 自定制分页类 pagination.py from rest_framework.pagination import PageNumberPagination ...
- 【DRF框架】序列化组件
DRF框架的序列化组件 在前后端分离的应用模式中,后端仅返回前端所需的数据,返回的数据类似是JSON,因此需要使用序列化组件进行序列化再将数据返回 使用JsonResponse做序列化 # 使用Js ...
- DRF的三大认证组件
目录 DRF的三大认证组件 认证组件 工作原理 实现 权限组件 工作原理 实现 频率组件 工作原理 实现 三种组件的配置 DRF的三大认证组件 认证组件 工作原理 首先,认证组件是基于BaseAuth ...
- 基于Django的Rest Framework框架的认证组件
0|1一.认证组件的作用 在一个程序中有一些功能是需要登录才能使用的,原生Django中的auth组件可以用来解决这个认证问题,drf框架中也有对应的认证组件来解决这个问题. models.py ...
- DRF内置认证组件之自定义认证系统
自定义token认证 我们知道,在django项目中不管路由以及对应的视图类是如何写的,都会走到 dispatch 方法,进行路由分发, 在阅读 APIView类中的dispatch 方法的源码中,有 ...
随机推荐
- centos7进单用户
当重启linux系统,进入系统选择页面的时候,按e 在linux16那一行最后面添加 init=/bin/sh 按ctrl+c 挂载根分区,可读写 mount / -o rw, remount
- 【模板】字符串匹配的三种做法(Hash、KMP、STL)
题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 输入输出格式 输入格式: 第一行为一个字符串,即为s1 第二行为一个字符串,即为s2 输出格式: 1行 ...
- tomcat之虚拟目录
一般我们都是直接引用webapps下面的web项目,如果我们要部署一个在其它地方的WEB项目,这就要在TOMCAT中设置虚拟路径了,Tomcat的加载web顺序是先加载 $Tomcat_home$\c ...
- Javascript 将字符串替换为特定的规律的字符串
Javascript 将字符串替换为特定的规律的字符串 这是测试过程,可以再简化一点. function spinalCase(str) { // "It's such a fine lin ...
- vue-router 路由跳转:和name配对的是params,和path配对的是query
1.命名路由name搭配params,刷新页面参数会丢失 2.路由path搭配query,刷新页面数据不会丢失 3.接收参数使用this.$router,就能获取到参数的值
- 承接VR外包|AR外包|Unity3D外包|UE4外包(内附案例演示)
北京团队长年承接VR/AR项目外包 咨询QQ:372900288 微信:liuxiang0884
- 多态,封装,反射,类内置attr属性,os操作复习
1.多态 #多态 多态是指对象如何通过他们共同的属性和动作来操作及访问,而不需要考虑他们具体的类 运行时候,多种实现 反应运行时候状态 class H2O: def __init__(self,nam ...
- 浅谈C#在网络波动时防重复提交
前几天,公司数据库出现了两条相同的数据,而且时间相同(毫秒也相同).排查原因,发现是网络波动造成了重复提交. 由于网络波动而重复提交的例子也比较多: 网络上,防重复提交的方法也很多,使用redis锁, ...
- JS语法基础
js声明 <!--在head标签中使用script标签进行js代码域声明--> <script type="text/javascript" language=& ...
- 无需脑图 无需思维导图 看Word大纲视图
大纲视图可以帮助我们大纲视图可帮助您管理文档的结构和标题,就像现在的脑图,经过我的使用后,可以说Word的分级功能非常强大,只恨当时理解的不够,误会了Word. 当我们决定写一个文档的时候,第一步 ...