1.认证组件
  1.1 认证组件利用token来实现认证
  1.2 token认证的大概流程
  用户登录===>获取用户名和密码===>查询用户表 如果用户存在,生成token,否则返回错误信息
  1.3 示例

补充:自定义的序列化类

BookSerializer.py

class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book fields = ('title',
'price',
'publish',
'authors',
'author_list',
'publish_name',
'publish_city'
)
extra_kwargs = {
'publish': {'write_only': True},
'authors': {'write_only': True}
} publish_name = serializers.CharField(max_length=32, read_only=True, source='publish.name')
publish_city = serializers.CharField(max_length=32, read_only=True, source='publish.city') author_list = serializers.SerializerMethodField() def get_author_list(self, book_obj):
# 拿到queryset开始循环 [{}, {}, {}, {}]
authors = list() for author in book_obj.authors.all():
authors.append(author.name) return authors

BookSerializer

models.py

 from django.db import models
#用户表 class User(models.Model) username=models.CharField(max_length=32),
password=models.CharFiels(max_length=32),
user_type_entry=(
(1,VIP),
(2,SVIP),
(3,VVIP),
),
user_type=models.IntegerField(choices=user_type_entry) def __str__(self):
return self.username #token表 class UserToken(models.Model):
user=models.OneToOneField('User',on_delete=models.CASADE)
token=model.CharFields(max_length=128),

models.py

urls.py

from django.urls import re_path
from serializer import views urlpatterns = [
re_path(r'books/$', views.BookView.as_view({
'get': 'list',
'post': 'create'
})),
re_path(r'books/(?P<pk>\d+)/$', views.BookView.as_view({
'get': 'retrieve',
'put': 'update',
'delete': 'destroy'
})),
re_path(r'user/$', views.UserView.as_view()),
]

urls.py

views.py

from django.http import JsonResponse
from rest_framework.views import APIView
from .models import (
Book,
Publish,
Author,
User,
UserToken
)
#用户登录认证
class UserView(APIView):
def post(self,request):
response=dict()
fields={"username","password"}
user_info=dict()
if fields.issubclass(set(request.data.keys()))
for key in fields:
user_info[key]=request.data[key]
user_instance=User.objects.filter(**user_info).first()
#如果用户名和密码存在,创建或者更新token
if user_info is not None:
access_token=str(uuid.uuid4()).replace('-','')
UserToken.objects.update_or_create (user=user_instance,defaults={"token":access_token})
response["status_code"]=200
response["status_message"]='登录成功'
response["status_token"]=access_token
# response["status_role"]=user_instance.get_user_type_diaplay()
else:
response["status_code"]=201
response["status_message"]="登录失败,用户名或密码错误"
#返回状态
return JsonResponse(response) #创建一个认证类
方式一:
class UserAuth():
def authenticate_header(self,request):
pass def authenticate(self,request):
#获取token
user_token=request.query_params.get('token')
try:
token=UserToken.objects.get(token=user_token)
return=token.user,token.token
except Exception:
rais APIException('没有认证')
注意:必须写authenticate_header和authenticate这两个函数名,源码中有声明,
authenticate_header中不写内容,但是必须书写,authenticate中书写逻辑
方式二:
from rest_framework.authentication import BaseAuthentication class UserAuth(BaseAuthentication):
def authenticate(self,request):
user_token=request.query_params.get("token")
try:
token=UserToken.objects.get(token=user_token) return token.user,token.token
except Exception:
raise APIException("没有认证") #访问book表需要认证和权限
class BookView(ModelViewSet):
#认证(只能是authentication_classes)
authentication_classes = [UserAuth]
#权限(只能是permission_classes)
permission_classes = [UserPerm] queryset = Book.objects.all()
serializer_class = BookSerializer

views.py

2.权限组件

views.py

2.1定义一个权限类:
class UserPerm():
#自定义返回内容
message="没有权限!"
def has_permission(self,request,view):
if request.user.user_type ==3:
return True
return False 2.2
#访问book表需要认证和权限
class BookView(ModelViewSet):
#认证(只能是authentication_classes)
authentication_classes = [UserAuth]
#权限(只能是permission_classes)
permission_classes = [UserPerm] queryset = Book.objects.all()
serializer_class = BookSerializer

views.py

3.频率组件

控制用户访问的频率

    3.1频率组件的使用
-首先定义一个频率类
-导入模块
from rest_framework.throttling import SimpleRateThrottle
-定义类
class RateThrottle(SimpleRateThrottle)
rate='5/m'#每分钟访问不能超过5次
def get_cache_key(self,request,view):
retuen self.get_ident(request) -指定一个频率类
class BookView(APIView):
throttle_class=[RateThrottle] 3.2利用FRF的简单频率来控制用户访问的频率(全局)
-导入模块
from rest_framework.throttling import SimpleRateThrottle
-定义一个频率类,一定继承SimpleRateThrottle
class RateThrottle(SimpleRateThrottle):
#指定访问的频率
scope="visit_rate"
#指定通过什么方式来区分用户
def get_cache_key(self,request,view):
return self.get_ident(request) -在全局seetings中指定频率类和访问的频率
REST_FRAMEWORK={
'DEFAULT_THROTTLE_CLASSES':("RateThrottle"),
"DEFAULE_THROTTLE_RATES"":{
"visit_rate":"5/m",
}
}

频率组件的局部使用和全局使用的流程

4.url注册器

一键创建url

    -导入模块
from django.urls import re_path,include
import views
from rest_framework import routers
-生成一个注册器的实例对象
router=routers.DafaultRouter()
-将需要生成的url接口注册
router.register(r"books",Views.BookView)
-开始自动生成url
urlpatterns=[
re_path('^',include(router.urls)),
]

url注册器的使用流程

5.响应器组件

    -导入模块
from rest_framework.renderers import JsonRender
-指定返回类
class BookView(APIView):
render_classes=[JsonRender]

响应器组件的使用

6.分页器组件

使用方法
-导入模块
from rest_framework.pagination import PageNumberPagination
-获取数据
books=Book.objects.all()
-创建一个分页器
paginater=PageNumberPagination()
-开始分页
paged_books=paginater.paginate_queryset(books,request)
-开始序列化
serialized_books=BookSerializer(paged_books,many=True)
-返回数据
return Response(serialized_books.data) -分页器的局部实现
-导入模块
from rest_framework.pagination import PageNumberPagination
-自定义一个分页类,要继承PageNumberPagination
class MyPagination(PageNumberPagination):
page_aize=2#每页显示2条数据
page_query_param='p'
page_size_query_param='size'
max_page_size=5#最多显示5条数据 -实例化一个分页类
paginater=MyPagination()
-开始分页
paged_books=paginater.paginate_queryset(books,request)
-开始序列化
serialized_books=BookSerializer(paged_books,many=True)
-返回数据
return Response(serialized_books.data)

分页器组件的使用以及局部使用

rest认证组件,权限组件,频率组件,url注册器,响应器组件,分页器组件的更多相关文章

  1. DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

    DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件   本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...

  2. day91 DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

    DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件   本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...

  3. Restful 4 -- 认证组件、权限组件、频率组件、url注册器、响应器、分页器

    一.认证组件.权限组件.频率组件总结:  只有认证通过的用户才能访问指定的url地址,比如:查询课程信息,需要登录之后才能查看,没有登录,就不能查看,这时候需要用到认证组件 1.认证组件格式 写一个认 ...

  4. 20.DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

    一 认证组件 1. 局部认证组件 我们知道,我们不管路由怎么写的,对应的视图类怎么写的,都会走到dispatch方法,进行分发, 在咱们看的APIView类中的dispatch方法的源码中,有个sel ...

  5. day 89 DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

    DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件   本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...

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

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

  7. Rest_Framework之认证、权限、频率组件源码剖析

    一:使用RestFramwork,定义一个视图 from rest_framework.viewsets import ModelViewSet class BookView(ModelViewSet ...

  8. DRF(5) - 频率组件、url注册器、响应器、分页器

    一.频率组件 1.使用DRF简单频率控制实现对用户进行访问频率控制 1)导入模块,定义频率类并继承SimpleRateThrottle # 导入模块 from rest_framework.throt ...

  9. rest-framework频率组件、url注册器、响应器、分页器

    频率组件 import time from rest_framework.throttling import BaseThrottle,SimpleRateThrottle IP_DICT = {} ...

随机推荐

  1. How To Use the Widget Factory 使用widget factory创建插件

    To start, we'll create a progress bar that just lets us set the progress once.  创建一个基于widget factory ...

  2. ELK实时日志分析平台环境部署--完整记录(ElasticSearch+Logstash+Kibana )

    https://blog.csdn.net/oLevin/article/details/81020794

  3. React-Native 之 GD (一)目录结构与第三方框架使用与主题框架搭建

    1.APP效果图 2.工程环境配置 IOS: 将压缩包内的 Images.xcassets 文件夹直接替换掉我们iOS工程中的 Images.xcassets 文件夹. 这时候我们可以看到所有图片资源 ...

  4. 二十三、python中的time和datetime模块

    A.time模块   1. sleep():强制等待 import timeimport datetime print("start to sleep.....")time.sle ...

  5. 《JavaScript 高级程序设计》

    第 3 章 基本概念 3.5.2 位操作符 ECMAScript 中所有数值都是以 IEEE-754 64 位格式存储,但位操作符并不直接操作 64 位的值.而是先将 64 位的值转换成 32 位的整 ...

  6. jQuery Ajax方法调用 Asp.Net WebService、WebMethod 的详细实例代码

    将以下html存为ws.aspx <%@ Page Language="C#" AutoEventWireup="true" %> <scri ...

  7. linux中安装gitlab和cicd(断网版)

    1:先介绍一下怎么查找所需要的依赖包 #yum install rpmname--downloadonly --downloaddir=/rpmpath 例如:yum install gitlab-r ...

  8. 分支结构 :if - else

    分支结构 :if - else 格式一: if(条件表达式){ 执行语句; } 格式二:二选一 if(条件表达式){ 执行语句1; }else{ 执行语句2; } 格式三: 多选一 if(条件表达式1 ...

  9. -webkit-overflow-scrolling:touch介绍和碰到的坑

    1.作用 可控制元素在移动设备有滚动回弹效果,可惯性滚动 2.适应场景 在ios移动端上,设置容器overflow-y:scroll;使容器内元素滚动时,滑动会很卡顿,使用-webkit-overfl ...

  10. 搜索(DFS)---好友关系的连通分量数目

    好友关系的连通分量数目 547. Friend Circles (Medium) Input: [[1,1,0], [1,1,0], [0,0,1]] Output: 2 Explanation:Th ...