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的更多相关文章

  1. Django - rest - framework - 下

    一.视图三部曲 https://www.cnblogs.com/wupeiqi/articles/7805382.html 使用混合(mixins) 之前得视图部分 # urls.py from dj ...

  2. Django中views笔记

    reverse反解析 #路由中定义namespace.name,reverse可将其转换为url url = reverse('namespace:name') return redirect(url ...

  3. ModelViewSet 路由 / django logging配置 / django-debug-toolbar使用

    一.ModelViewSet 路由 因为我们正在使用ViewSet代替View,实际上已经不再需要自己来设计URL的配置了.将资源和视图.URL绑定到一起是一个可以自动完成的过程,只需要使用Route ...

  4. Django的rest_framework的视图之基于ModelViewSet视图源码解析

    前言 今天一直在整理Django的rest_framework的序列化组件,前面一共写了2篇博客,前面的博客给的方案都是一个中间的状态的博客,其中有很多的冗余的代码,如果有朋友不清楚,可以先看下我前面 ...

  5. ModelViewSet 视图集 实现接口

    一.创建项目 1.创建 项目 : django-admin startprojet drf 2. 创建 两个app   ------ app1 ,book python manage.py start ...

  6. Django Rest Framework----ModelViewSet视图 ModelViewSet源码分析

    一.视图类 #bookview是一个视图类,继承自ModelViewSet class BookView(ModelViewSet): throttle_classes = [VisitThrottl ...

  7. DRF--重写views

    前戏 在前面几篇文章里,我们写了get请求,post请求,put请求,在来写个delete请求,大概如下. class BookView(APIView): # 查询所有的数据和post方法 def ...

  8. 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 ...

  9. rest_framework之ModelViewSet、路由控制、序列化组件快速搭建项目雏形

    以UserInfo表登陆接口为例 ModelViewSet的用法十分简单,定义一个视图类,指定一个模型表,指定一个序列化类即可帮我们完成增删改查等功能 示例: # 视图层 from app01.MyS ...

随机推荐

  1. 简述BFS与DFS

    简述BFS与DFS 最近学习了数据结构课程以及应对蓝桥杯备考,所以花费了一点时间将比较重要的两个搜索BFS(宽度优先搜索)和DFS(深度优先搜索)大致思路以及代码整理出来,如有错误,还请各位大佬批评改 ...

  2. soso官方:基于相关排序的判断

    http://www.wocaoseo.com/thread-186-1-1.html 议程 概述 检索词 用户的信息需求 网页的自有信息 网页的附属信息 相关性的计算框架 概述 相关性的表象 检索词 ...

  3. CSP 201312-1 出现次数最多的数

    思路 由于输入的数组元素是 1 ≤ si ≤ 10000,所以开一个 10001 的数组.输入的过程中使用 num 记录出现的最大次数: 在所有输入结束后,遍历数组元素,由于题目要求出现多个众数输出最 ...

  4. Salesforce LWC学习(二十二) 简单知识总结篇二

    本篇参看: https://developer.salesforce.com/docs/component-library/documentation/en/lwc/lwc.reactivity_fi ...

  5. js动画和css3动画的区别

    JS动画(逐帧动画) 首先,在js动画是逐帧动画,是在时间帧上逐帧绘制帧内容,由于是一帧一帧的话,所以他的可操作性很高,几乎可以完成任何你想要的动画形式.但是由于逐帧动画的帧序列内容不一样,会增加制作 ...

  6. Tiled and Unity

    https://www.mapeditor.org https://assetstore.unity.com/packages/tools/integration/tiled-to-unity-172 ...

  7. 微信小程序授权登录--PHP后端接口

    由于之前做过公众号的一个开发,所以再开发小程序就没有那么多坑了,在这也记录一下开发过程,以方便后续进行参考. 废话不多说,直接上官方文档,任何使用第三方开发的,不看文档就是耍流氓.小程序开发文档,可以 ...

  8. python学习第八天

    解析库之bs4的基本使用方法 ''' pip install beautifulsoup4#安装bs4 pip install lxml#安装lxml ''' html_doc = "&qu ...

  9. RedisTemplate: Failed to deserialize payload

    问题 org.springframework.data.redis.serializer.SerializationException: Cannot deserialize; nested exce ...

  10. 简单的特征值梯度剪枝,CPU和ARM上带来4-5倍的训练加速 | ECCV 2020

    论文通过DBTD方法计算过滤阈值,再结合随机剪枝算法对特征值梯度进行裁剪,稀疏化特征值梯度,能够降低回传阶段的计算量,在CPU和ARM上的训练分别有3.99倍和5.92倍的加速效果   来源:晓飞的算 ...