rest_framework 认证组件 权限组件
认证组件 权限组件
一、准备内容
# models
class User(models.Model):
name = models.CharField(max_length=32)
pwd = models.CharField(max_length=64)
user_type = models.IntegerField(choices=((1, "超级管理员"), (2, "普通管理员"), (3, "2b用户")), default=3)
# 跟User表做一对一关联
class Token(models.Model):
user = models.OneToOneField(to='User')
token = models.CharField(max_length=64)
二、认证逻辑
# MyAuths.py 自定义认证逻辑代码
class MyAuth(BaseAuthentication):
def authenticate(self, request):
# 写认证的逻辑
token = request.GET.get('token')
token_obj = models.Token.objects.filter(token=token).first()
if token_obj:
# 能够取到值,表示已经登录了
print("验证登录通过")
return token_obj.user, token_obj
else:
# 没有取到值,表示没有登录,往外抛异常
raise AuthenticationFailed('还没有登录呦')
# views.py 视图部分逻辑
from rest_framework.views import APIView
from app01 import models
import uuid # 用来生成唯一token
from django.core.exceptions import ObjectDoesNotExist
from rest_framework.response import Response
from app01.MyAuths import MyAuth
# Create your views here.
class Books(APIView):
# 局部认证, 源码中的 authentication_classes 部分,执行列表中的认证逻辑
# 执行优先级为:最高是此处定义的视图类中定义的 ---> 如果没有,就去项目settings.py中查找 ---> 都没有就选择rest_framework默认的配置文件中取
authentication_classes = [MyAuth, ]
def get(self, request):
# request.user 就是当前登录用户
print(request.user.name) # 'AnonymousUser' object has no attribute 'name'
# 上面语句后面的错误,是因为原先将 authentication_classes = [MyAuth, ] 这句代码放进了get方法里面了
# print(request.user.name, type(request.user))
return Response('这个是验证过登录而返回的的信息!')
class Login(APIView):
def post(self, request):
response = {'code': 100, 'msg': '登录成功'}
name = request.data.get('name')
pwd = request.data.get('pwd')
try:
user = models.User.objects.filter(name=name, pwd=pwd).get()
# 登录成功,需要将token写进token表中
# 生成一个唯一的token id
token = uuid.uuid4()
models.Token.objects.update_or_create(user=user, defaults={'token': token})
response['token'] = token
except ObjectDoesNotExist as e:
response['code'] = 101
response['msg'] = '用户名或者密码错误'
except Exception as e:
response['code'] = 102
response['msg'] = str(e)
return Response(response)
三、权限逻辑
# MyAuths.py 权限逻辑部分
class MyPermision(BasePermission):
message = '不是超级用户,查看不了'
def has_permission(self,request,view):
if request.user.user_type==1:
return True
else:
return False
# views.py 视图逻辑部分
class Publish(APIView):
# authentication_classes = [] 在setting.py里面设置了全局的token认证,
authentication_classes = [MyAuth, ]
permission_classes = [MyPermision, ]
def get(self, request):
# print(request.user.name)
return Response('返回了所有出版社信息')
rest_framework 认证组件 权限组件的更多相关文章
- rest-framework组件 之 认证与权限组件
浏览目录 认证组件 权限组件 频率组件 认证与权限组件 认证组件 局部视图认证 在app01.service.auth.py: class Authentication(BaseAuthenticat ...
- drf框架 - 三大认证组件 | 认证组件 | 权限组件 | 频率组件
RBAC 基于用户权限访问控制的认证 - Role-Based Access Control Django框架采用的是RBAC认证规则,RBAC认证规则通常会分为 三表规则.五表规则,Django采用 ...
- 第四章、drf框架 - 三大认证组件 | 认证组件 | 权限组件 | 频率组件
目录 RBAC 基于用户权限访问控制的认证 - Role-Based Access Control 三大认证组件 源码分析 一.认证组件 自定义认证类 使用: 二.权限组件 自定义权限类 三.频率组件 ...
- DRF(4) - 认证、权限组件
一.引入 通过前面三节课的学习,我们已经详细了解了DRF提供的几个重要的工具,DRF充分利用了面向对象编程的思想,对Django的View类进行了继承,并封装了其as_view方法和dispatch方 ...
- rest-framework认证、权限组件
认证组件: models class User(models.Model): username = models.CharField(max_length=32) password = models. ...
- rest认证组件,权限组件,频率组件,url注册器,响应器组件,分页器组件
1.认证组件 1.1 认证组件利用token来实现认证 1.2 token认证的大概流程 用户登录===>获取用户名和密码===>查询用户表 如果用户存在,生成token,否则返回错误信息 ...
- drf三大认证:认证组件-权限组件-权限六表-自定义认证组件的使用
三大认证工作原理简介 认证.权限.频率 源码分析: from rest_framework.views import APIView 源码分析入口: 内部的三大认证方法封装: 三大组件的原理分析: 权 ...
- $Django Rest Framework-认证组件,权限组件 知识点回顾choices,on_delete
一 小知识点回顾 #orm class UserInfo (models.Model): id = models.AutoField (primary_key=True) name = models. ...
- rest_framework 认证与权限
一 认证 1.1先写个类(认证组件) from app01 import models from rest_framework import exceptions from rest_framewo ...
随机推荐
- Java转型大数据开发全套教程,都在这儿!
众所周知,很多语言技术已经在长久的历史发展中掩埋,这期间不同的程序员也走出的自己的发展道路. 有的去了解新的发展趋势的语言,了解新的技术,利用自己原先的思维顺利改变自己的title. 比如我自己,也都 ...
- 硬RAID与软RAID的区别
什么是RAID? RAID是英文Redundant Array of Independent Disks的缩写,翻译成中文即为独立磁盘冗余阵列,或简称磁盘阵列.简单的说,RAID是一种把多块独立的硬盘 ...
- react 16.3+ 新生命周期
react 16.3版本出现了两个新的生命周期函数,并将逐渐废弃componentWillMount().componentWillReceiveProps().componentWillUpdate ...
- 路由网关--spring cloud zuul
路由网关--spring boot Zuul 1.为什么需要Zuul? Zuul Ribbon 以及 Eureka 相结合,可以实现智能路由和负载均衡的功能, Zuul 能够将请求流量按某种策略分发到 ...
- 58. jdk1.5新特性之静态导入
jdk1.5新特性之--------静态导入 作用:简化书写(在我们使用静态方法的时候要用 类名.方法名的方式调用.而用静态导入只需要写方法名就可以调用) 语法: 1.作用于一个方法: ...
- ES6常用点
原文 http://es6.ruanyifeng.com/#docs 变量--------------------------------------------- 1.let声明.const声 ...
- IReport实践指南
IReport实践指南 前言 最近,在做一个电子签章的功能,然后就接触到IReport报表,经过好几天的摸索实践,功能已经完成了,今天来总结一下. 什么是IReport,IReport是JasperR ...
- 使用HBuilder编辑器进行真机调试运行时提示Waiting for debugger!
在使用HBuilder编辑器创建mui项目进行真机调试的时候,手机总是提示Waiting for debugger! 现在终于找到了解决办法: 手机 设置 -> 开发人员选项 -> USB ...
- Delphi 2010 XE 中使用 JSON 之 SuperObject68-6
JSON之SuperObject(1):一直盼着Delphi能够直接支持"正则:Delphi2009刚来的时候,有了JSON,但:Delphi2010带了两个相关单元:DBXJS:我想不等了 ...
- java IO 流小结
java IO 流小结 java流类图结构 流的分类 按方向 输入流 输出流 按类型 字节流 字符流 结论:只要是处理纯文本数据,就优先考虑使用字符流. 除此之外都使用字节流.