modelviewset views
Python
1.4创建user/serializers.py写序列化器
from rest_ framework import serializers
from user 。models import User
def address_ validate( data):
#独立校验器
# raise serializers . ValidationError('请填写实际地址') #有错就抛出异常
#没错就返回数据
return data
#没错就返回数据
return data
class UserSerializer(serializers . ModelSerializer):
# 1.独立校验器: 重新设定字段,替换掉模型中的设定,重新设定地址的长度为5
address = serializers CharF ield(max_ 1ength=255,min_ 1ength=5, val idators= [address_ validate])
# 2.单一字段验证,验证地址
def validate_ address(self, data):
if data =='测试':
raise serializers . ValidationError( '请填写实际地址") # 有错就抛出异常
return data # 没错就返回结果
def validate. _phone(self, data):
#不符合手机号格式
# raise serializers . ValidationError('手机号格式不正确')
model = self . root. Meta . model
num = model . objects . filter( phone=data) . count( ) """
from django.http import HttpResponse # http响应
from django_filters.rest_framework import DjangoFilterBackend # Django过滤器后端
from rest_framework import viewsets # 视图集
from rest_framework . authentication import BasicAuthentication,SessionAuthentication # 基本身份验证, 会话身份验证
from rest_framework.decorators import action
from rest_framework.filters import OrderingFilter # 排序过滤器
from rest_framework. permissions import AllowAny,IsAdminUser,IsAuthenticated,IsAuthenticatedOrReadOnly #从权限导入允许所有、Admin用户、经过身份验证、经过身份验证或只读
from rest_framework.response import Response
from rest_framework.throttling import UserRateThrottle # 用户速率节流
from rest_framework.pagination import PageNumberPagination # 页码分页
from rest_framework .views import APIView
from rest_framework .permissions import BasePermission,SAFE_METHODS # 基础权限、SAFE_METHODS
from user .models import UserModel
from user.serializers import UserSerializer
""" def index(request):
# 需要认证才能访问的视图
return HttpResponse('hello') """分页布局:自定义分页器 布局""" class PageNum(PageNumberPagination):
"""查询字符串中代表每页返回数据数量的参数名,默认值: None"""
page_size_query_param = 'page_size'
# 查询字符串中代表页码的参数名,有默认值: page
page_query_param = 'page'
# 一页中最多的结果条数
max_page_size = 2 """自定义权限(局部)""" class MyPermission(BasePermission):
def has_permission(self, request, view):
print(view.kwargs.get("pk"), request.user.id)
"""判断用户对模型有没有访问权
任何用户对使用此权限类的视图都有访问权限"""
print(request)
if request.user.is_superuser:
"""管理员对用户模型有访问权"""
return True
elif view.kwargs.get('pk') == str(request.user.id):
"""携带的id和用户的id相同时有访问权"""
return True
return False def has_object_permission(self, request, view, obj):
# 获取单个数据时,判断用户对某个数据对象是否有访问权限
if request.user.id == obj.id:
return True
return False class UserViewSet(viewsets.ModelViewSet):
"""完成产品的增删改查"""
queryset = User.objects.all()
serializer_class = UserSerializer # 优先使用get_serializer_class返回的序列化器?
# #1.认证:自定义认证类,自定义会覆盖全局配置
# authentication_classes = (BasicAuthentication,SessionAuthentication)
# #2.权限:自定义权限类
# permission_classes = (MyPermission,) # 3.分页:自定义分页器覆盖全局配置
pagination_class = PageNum
# 4.限流:自定义限流类
throttle_classes = [UserRateThrottle]
# 5.过滤:指定过滤方法类,排序方法类,一个或多个
filter_backends = (DjangoFilterBackend, OrderingFilter)
# 5.1指定排序字段,不设置,排序功能不超效
ordering_fields = ('date_joined', 'id')
# 5.2指定过滤字段,不设置,过滤功能不起效
filter_fields = ('username', 'phone', 'is_active') def get_serializer_class(self):
if self.action == 'unactived':
return UserUnActiveSerializer
else:
return UserSerializer @action(methods=['get'], detail=False)
def unactived(self, request, *args, **kwargs):
# 获取查询集,过滤出未激活的用户
qs = self.queryset.filter(is_active=False)
# 使用序列化器,序列化查询集,并且序列化多条
ser = self.get_serializer(qs, many=True)
return Response(ser.data)
modelviewset views的更多相关文章
- Django - rest - framework - 下
一.视图三部曲 https://www.cnblogs.com/wupeiqi/articles/7805382.html 使用混合(mixins) 之前得视图部分 # urls.py from dj ...
- Django中views笔记
reverse反解析 #路由中定义namespace.name,reverse可将其转换为url url = reverse('namespace:name') return redirect(url ...
- ModelViewSet 路由 / django logging配置 / django-debug-toolbar使用
一.ModelViewSet 路由 因为我们正在使用ViewSet代替View,实际上已经不再需要自己来设计URL的配置了.将资源和视图.URL绑定到一起是一个可以自动完成的过程,只需要使用Route ...
- Django的rest_framework的视图之基于ModelViewSet视图源码解析
前言 今天一直在整理Django的rest_framework的序列化组件,前面一共写了2篇博客,前面的博客给的方案都是一个中间的状态的博客,其中有很多的冗余的代码,如果有朋友不清楚,可以先看下我前面 ...
- ModelViewSet 视图集 实现接口
一.创建项目 1.创建 项目 : django-admin startprojet drf 2. 创建 两个app ------ app1 ,book python manage.py start ...
- Django Rest Framework----ModelViewSet视图 ModelViewSet源码分析
一.视图类 #bookview是一个视图类,继承自ModelViewSet class BookView(ModelViewSet): throttle_classes = [VisitThrottl ...
- DRF--重写views
前戏 在前面几篇文章里,我们写了get请求,post请求,put请求,在来写个delete请求,大概如下. class BookView(APIView): # 查询所有的数据和post方法 def ...
- Django源码分析rest_framework 关于re_path('^publish/', views.PublishView.as_view()总结
1. ApiView 定义一个cbc视图 class BookView (APIView):pass re_path(r"books/$", views.BookView.as_v ...
- rest_framework之ModelViewSet、路由控制、序列化组件快速搭建项目雏形
以UserInfo表登陆接口为例 ModelViewSet的用法十分简单,定义一个视图类,指定一个模型表,指定一个序列化类即可帮我们完成增删改查等功能 示例: # 视图层 from app01.MyS ...
随机推荐
- foreach循環體控制
通常情況下,在程式中的cursor定義之前,整合了l_sql變量后,轉化sql語句時,通過檢查STATUS的值來判斷sql語句是否有錯誤. 語句如: if STATUS th ...
- 2020.08.14小bug
页面下面的滚动条怎么清除 css overflow-x: hidden;
- 巧用HashMap一行代码统计单词出现次数
简介 JDK是在一直在迭代更新的,很多我们熟悉的类也悄悄的添加了一些新的方法特性.比如我们最常用的HashMap. 今天给大家讲一下HashMap在JDK8中添加的两个新方法compute和merge ...
- 解决Oracle12cr2自创建用户无法登录的问题
说明: 下面创建是创建CDB本地用户,不是PDB应用程序用户,如果是PDB应用程序创建语法会不一样.下面介绍创建CDB本地用户. 创建表空空间 CREATE TABLESPACE YH datafil ...
- layaair 物理
box2d http://box2d.org Box2D JS https://sourceforge.net/projects/box2d-js/ Box2D一:基础知识 https://www.c ...
- 11_Python的69个内置函数详解
1.内置函数分类 思维导图: https://www.processon.com/view/link/5dcabc48e4b0bd68d813b24f 2.基础数据类型-和数字相关的函数(14) 数据 ...
- C#知识点:I/O
一.什么是I/0流? 英文翻译:Input/Output,在程序里简单的理解为读写数据操作数据的意思.流操作是为了解决体积大数据占用太多的内存,就是分段进行操作.就跟我们吃饭一样,一口一口的吃,还没见 ...
- BIO应用-RPC框架
为什么要有RPC? 我们最开始开发的时候,一个应用一台机器,将所有功能都写在一起,比如说比较常见的电商场景. 随着我们业务的发展,我们需要提示性能了,我们会怎么做?将不同的业务功能放到线程里来实现异 ...
- 虚拟PWN初探
前言 之前看到星盟Q群里面的消息,Freedom师傅在B站直播关于虚拟pwn入门的公开课,然后就去听了一波,感觉受益匪浅.之前一直以为虚拟pwn是超级复杂的东西,今年打比赛也遇到了好几次,一直无从下手 ...
- nginx安装步骤和加固方案
安装步骤参考https://blog.csdn.net/qq_37345604/article/details/90034424 出现以下页面就表示安装完成(默认是80端口,我修改成了8009端口,所 ...