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 方法的源码中,有 ...
随机推荐
- Java基础语法入门
一.Java运行原理 写好java代码,执行javac命令,通过jvm把.java源文件编译成.class文件,执行java命令把字节码文件编译成特定平台能识别的机器码 二.标识符 1.标识符是用于数 ...
- [SQL] 从文本中提取数值
现需求从上方测试数据的“备注”列中提取出金额 目前有两个方法比较容易实现: 1.首先比较容易想到的就是利用函数stuff删除掉所有的非数值字符. STUFF ( character_expressio ...
- What You Can Learn from Actifio Logs
The Actifio services generate many logs, some of which are useful for troubleshooting. This section ...
- day-10初级函数
函数 函数的定义 函数:完成 特定 功能的代码块,作为一个整体,对其进行特定的命名,该名字就代表函数-- 现实中:很多问题要通过一些工具进行处理 => 可以将工具提前生产出来并命名=> 通 ...
- Javascript 将字符串替换为特定的规律的字符串
Javascript 将字符串替换为特定的规律的字符串 这是测试过程,可以再简化一点. function spinalCase(str) { // "It's such a fine lin ...
- Django学习笔记之视图高级-类视图
类视图 在写视图的时候,Django除了使用函数作为视图,也可以使用类作为视图.使用类视图可以使用类的一些特性,比如继承等. View django.views.generic.base.View是主 ...
- WIN10X64_LTSB2016极限精简版by双心
WIN10X64LTSB2016极限精简版by双心http://www.cnblogs.com/liuzhaoyzz/p/9162113.html 一.前言:关于极限精简版的说明 本系统为极限精简版, ...
- TCP/IP学习20180709-数据链路层-arp协议
arp协议:address resolution protocol地址解析协议数据链路层,每个数据包都有MAC地址.主机是怎样根据对方主机的ip地址知道对方主机的mac地址呢?通过arp协议.主机里有 ...
- centos7卸载旧jdk安装新jdk1.8
卸载旧JDK版本 需卸载centos7自带的JDK1.7 rpm -qa|grep jdk 列出已安装jdk版本 rpm -e --nodeps java-1.7.0-openjdk-1.7. ...
- nginx1.14.0版本负载均衡配置
upstream配置: upstream upstream1 { server 192.168.10.130:8080; server 192.168.10.140:8080; #server 192 ...