DRF之权限认证频率组建
认证组件
很久很久以前,Web站点只是作为浏览服务器资源(数据)和其他资源的工具,甚少有什么用户交互之类的烦人的事情需要处理,所以,Web站点的开发这根本不关心什么人在什么时候访问了什么资源,不需要记录任何数据,有客户端请求,我即返回数据,简单方便,每一个http请求都是新的,响应之后立即断开连接。而现在不同,现在的时代已经不能没有用户了,所以随之而来的就是用户交互,之前对于用户认证的我们cookies和secess都可以,但是相对于我们今天学的token而言,市面上还是说token用的比较多一点,所以,token!!!你们懂了吧,嘿嘿好了,废话不说了直接上干货
1.创建表
model.py from django.db import models # Create your models here. class User(models.Model):
username = models.CharField(max_length=32)
password = models.CharField(max_length=32)
user_type_entry = (
(1, 'Delux'),
(2, 'SVIP'),
(3, "VVIP")
)
user_type = models.IntegerField(choices=user_type_entry)
address = models.CharField(max_length=32) def __str__(self):
return self.username class UserToken(models.Model):
user = models.OneToOneField("User", on_delete=models.CASCADE)
token = models.CharField(max_length=128)
2.urls
re_path(r'user/$', views.UserView.as_view()),
3.涉及用户交互的行为只有post请求的时候才会有,所以我们只需要写post请求就可以了,get请求我们不必写
views.py from django.http import JsonResponse from rest_framework.views import APIView from .models import User, Book, UserToken
from .utils import get_token class UserView(APIView): def post(self, request):
response = dict()
try:
#因为所有的数据都在request.data中,所以我们取得时候就直接在data中取
username = request.data['username']
password = request.data['password'] user_instance = User.objects.filter(
user_name=username,
password=password
).first() #get_token.generater_token() 这里使我们随机产生的token值,我们需要在下一步中引用一下
if user_instance:
access_token = get_token.generater_token() UserToken.objects.update_or_create(user=user_instance, defaults={
"token": access_token
})
response["status_code"] = 200
response["status_message"] = "登录成功"
response["access_token"] = access_token
response["user_role"] = user_instance.get_user_type_display()
else:
response["status_code"] = 201
response["status_message"] = "登录失败,用户名或密码错误"
except Exception as e:
response["status_code"] = 202
response["status_message"] = str(e) return JsonResponse(response)
4.新建utils文件夹
import uuid def generater_token():
random_str = ''.join(str(uuid.uuid4()).split('-'))
return random_str
5.完美,现在一个简单的token就已经创建完了,下面,开始我们认证组建的使用
6.第一步:新建一个认证类
from rest_framwork.authentication import BaseAuthentication
from rest_framwork.exceptions import APIException #. 代表往上走一层,或者你可以直接写你自己的当前程序
from .model import UserToken
views.py #权限类
class UserPerm():
message = "您没有查看该数据的权限!" def has_permission(self, request, view):
#这里的3就是我们新建表中的数据
if request.user.user_type == 3:
return True
return False class BookView(ModelViewSet):
#指定认证类
authentication_class = [UserAuth]
#指定权限类
permission_classes= [UserPerm] #序列化
queryset = Book.objects.all()
serializer_class = BookSerializer
class UserAuth(BaseAuthentication): #这里注意,认证类中必须有authenticate这个方法!!!为啥?看源码
def authenticate(self,request):
user_token = request.query_params.get('token')
#一定要记得try
try:
token = UserToken.objects.get(token = user_token)
return token.user,token.token
except Exception as e:
raise APIException('没有认证')
频率组件
1.写频率类
from rest_framework.throttling import SimpleRateThrottle #必须继承SimpleRateThrottle这个类
class RateThrottle(SimpleRateThrottle):
rate = '5/m' def get_cache_key(self, request, view):
#这里是通过id来控制访问的频率
return self.get_ident(request)
2.指定频率类
from .utils.throttles import RateThrottle # Create your views here. class BookView(ModelViewSet):
throttle_classes = [ RateThrottle ]
queryset = Book.objects.all()
serializer_class = BookSerializer
3.用!!!
好了。现在我们的基本就实现了,后期还会有补充哦
参考网址;https://pizzali.github.io/2018/12/07/DRF%E4%B9%8B%E6%9D%83%E9%99%90%E8%AE%A4%E8%AF%81%E9%A2%91%E7%8E%87%E7%BB%84%E4%BB%B6/
DRF之权限认证频率组建的更多相关文章
- DRF之权限认证频率组件
概要 retrieve方法源码剖析 认证组件的使用方式及源码剖析 权限组件的使用方式及源码剖析 频率组件的使用方式及源码剖析 知识点复习回顾 Python逻辑运算 知识点复习回顾一:Python逻辑运 ...
- DRF的权限和频率
DRF的权限 权限组件源码 权限和频率以及版本认证都是在initial方法里初始化的 我们的权限类一定要有has_permission方法~否则就会抛出异常~~这也是框架给我提供的钩子~~ 在rest ...
- DRF之权限认证,过滤分页,异常处理
1. 认证Authentication 在配置文件中配置全局默认的认证方案 REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_f ...
- DRF之权限和频率限制
一.权限 权限可以限制用户对视图的访问和对具体数据对象的访问. 在执行视图的dispatch方法前,会先进行视图访问权限的判断 在通过get_object获取对象时,会进行模型对象访问权限的判断 源码 ...
- drf框架 - 三大认证组件 | 认证组件 | 权限组件 | 频率组件
RBAC 基于用户权限访问控制的认证 - Role-Based Access Control Django框架采用的是RBAC认证规则,RBAC认证规则通常会分为 三表规则.五表规则,Django采用 ...
- DRF 认证 权限 视图 频率
认证组件 使用:写一个认证类,继承BaseAuthentication 在类中写authenticate方法,把request对象传入 能从request对象中取出用户携带的token根据token判 ...
- DRF 权限和频率
Django Rest Framework 权限组件 DRF的权限 权限组件源码解析 我们之前说过了DRF的版本和认证~也知道了权限和频率跟版本认证都是在initial方法里初始化的~~ 其实我们版本 ...
- rest-framework框架——认证、权限、频率组件
一.rest-framework登录验证 1.models.py添加User和Token模型 class User(models.Model): name = models.CharField(max ...
- DRF 版本、认证、权限、限制、解析器和渲染器
目录 一.DRF之版本控制 为什么要有版本控制? DRF提供的版本控制方案 版本的使用 全局配置 局部配置(使用较少) 二.DRF之认证 内置的认证 步骤 三.DRF之权限 1.自定义一个权限类 2. ...
随机推荐
- 使用Serializable接口进行JAVA的序列化和反序列化
OBJECT STREAMS – SERIALIZATION AND DESERIALIZATION IN JAVA EXAMPLE USING SERIALIZABLE INTERFACE Hite ...
- C指针的解析
这是我从网上转载的一篇关于C指针的文章,方便自己以后回顾,自己添加修改部分内容 ,不对请指正 Attention:指针是指针变量 ,数组是指针常量 第一章 指针的概念 指针是一个特殊的变量,它里面存 ...
- C#实现远程开机(局域网测试通过)
首先介绍相关知识. UDP协议 UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联 ...
- JetBrains WebStorm 如何从GitHub上克隆的代码
工作中经常会遇到要从GitHub上拉代码,详细操作记录如下: 绑定账号 1.File->Settings->Version Control->Github 成功后会出现下面的这个账户 ...
- NSString 字符串
0.字符串常用操作 自动补充方法:当字符串长度不够需要自动补充到一定的位数 OC字符串与C语言字符串之间的相互转换 1.不可变字符串的创建 // 直接创建不可变字符串 /* 在 OC 中,使用 @&q ...
- 【转】 PHP 两个日期(时间段) 之间的日期数组
在开发过程中会遇到这样一个需求:获取2018-11-02到2018-11-15之间的日期数组 希望得到如下数组: Array ( [] => -- [] => -- [] => -- ...
- ObjectARXWizards & AutoCAD .NET Wizards 下载地址
Autodesk Developer Network ObjectARX Wizards The ObjectARX Wizards for AutoCAD 2016 for Visual Stud ...
- java webservices 以Axis1.4方式 调用sap webservice接口.
1. 首先需要下载Axis1.4 jar包,这个必应搜索大把,下载下来后把jar包加入eclipse工程项目路径中即可. 2. 下载mail.jar和activation.jar 俩个包.下载地址:h ...
- 浅谈python web框架django2.x
1.Django简介 Python下有多款不同的 Web 框架,Django是最有代表性的一种.许多成功的网站和APP都基于Django. Django是一个开源的Web应用框架,由Python写成. ...
- springboot整合redis存放session
y进入maven依赖: <!--spring boot 与redis应用基本环境配置 --> <dependency> <groupId>org.springfra ...