认证组件

  很久很久以前,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之权限认证频率组建的更多相关文章

  1. DRF之权限认证频率组件

    概要 retrieve方法源码剖析 认证组件的使用方式及源码剖析 权限组件的使用方式及源码剖析 频率组件的使用方式及源码剖析 知识点复习回顾 Python逻辑运算 知识点复习回顾一:Python逻辑运 ...

  2. DRF的权限和频率

    DRF的权限 权限组件源码 权限和频率以及版本认证都是在initial方法里初始化的 我们的权限类一定要有has_permission方法~否则就会抛出异常~~这也是框架给我提供的钩子~~ 在rest ...

  3. DRF之权限认证,过滤分页,异常处理

    1. 认证Authentication 在配置文件中配置全局默认的认证方案 REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_f ...

  4. DRF之权限和频率限制

    一.权限 权限可以限制用户对视图的访问和对具体数据对象的访问. 在执行视图的dispatch方法前,会先进行视图访问权限的判断 在通过get_object获取对象时,会进行模型对象访问权限的判断 源码 ...

  5. drf框架 - 三大认证组件 | 认证组件 | 权限组件 | 频率组件

    RBAC 基于用户权限访问控制的认证 - Role-Based Access Control Django框架采用的是RBAC认证规则,RBAC认证规则通常会分为 三表规则.五表规则,Django采用 ...

  6. DRF 认证 权限 视图 频率

    认证组件 使用:写一个认证类,继承BaseAuthentication 在类中写authenticate方法,把request对象传入 能从request对象中取出用户携带的token根据token判 ...

  7. DRF 权限和频率

    Django Rest Framework 权限组件 DRF的权限 权限组件源码解析 我们之前说过了DRF的版本和认证~也知道了权限和频率跟版本认证都是在initial方法里初始化的~~ 其实我们版本 ...

  8. rest-framework框架——认证、权限、频率组件

    一.rest-framework登录验证 1.models.py添加User和Token模型 class User(models.Model): name = models.CharField(max ...

  9. DRF 版本、认证、权限、限制、解析器和渲染器

    目录 一.DRF之版本控制 为什么要有版本控制? DRF提供的版本控制方案 版本的使用 全局配置 局部配置(使用较少) 二.DRF之认证 内置的认证 步骤 三.DRF之权限 1.自定义一个权限类 2. ...

随机推荐

  1. 使用Serializable接口进行JAVA的序列化和反序列化

    OBJECT STREAMS – SERIALIZATION AND DESERIALIZATION IN JAVA EXAMPLE USING SERIALIZABLE INTERFACE Hite ...

  2. C指针的解析

    这是我从网上转载的一篇关于C指针的文章,方便自己以后回顾,自己添加修改部分内容 ,不对请指正 Attention:指针是指针变量 ,数组是指针常量 第一章 指针的概念  指针是一个特殊的变量,它里面存 ...

  3. C#实现远程开机(局域网测试通过)

    首先介绍相关知识. UDP协议 UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联 ...

  4. JetBrains WebStorm 如何从GitHub上克隆的代码

    工作中经常会遇到要从GitHub上拉代码,详细操作记录如下: 绑定账号 1.File->Settings->Version Control->Github 成功后会出现下面的这个账户 ...

  5. NSString 字符串

    0.字符串常用操作 自动补充方法:当字符串长度不够需要自动补充到一定的位数 OC字符串与C语言字符串之间的相互转换 1.不可变字符串的创建 // 直接创建不可变字符串 /* 在 OC 中,使用 @&q ...

  6. 【转】 PHP 两个日期(时间段) 之间的日期数组

    在开发过程中会遇到这样一个需求:获取2018-11-02到2018-11-15之间的日期数组 希望得到如下数组: Array ( [] => -- [] => -- [] => -- ...

  7. ObjectARXWizards & AutoCAD .NET Wizards 下载地址

    Autodesk Developer Network ObjectARX Wizards The ObjectARX Wizards for AutoCAD 2016 for  Visual Stud ...

  8. java webservices 以Axis1.4方式 调用sap webservice接口.

    1. 首先需要下载Axis1.4 jar包,这个必应搜索大把,下载下来后把jar包加入eclipse工程项目路径中即可. 2. 下载mail.jar和activation.jar 俩个包.下载地址:h ...

  9. 浅谈python web框架django2.x

    1.Django简介 Python下有多款不同的 Web 框架,Django是最有代表性的一种.许多成功的网站和APP都基于Django. Django是一个开源的Web应用框架,由Python写成. ...

  10. springboot整合redis存放session

    y进入maven依赖: <!--spring boot 与redis应用基本环境配置 --> <dependency> <groupId>org.springfra ...