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. oracle练习前期准备

    oracle练习前期准备 登陆scott用户(默认密码tiger),开始一般提示用户已锁. 解决办法:登陆sys或system用户解锁 输入命令alter user scott account unl ...

  2. Vue + axios + SpringBoot 2实现导出Excel

    Vue + axios + SpringBoot 2实现导出Excel 1. 前端js代码-发送Http请求 /** * 文件下载 * @param url 下载地址 * @param fileNam ...

  3. 服务应用突然宕机了?别怕,Dubbo 帮你自动搞定服务隔离!

    某日中午,午睡正香的时候,接到系统的报警电话,提示生产某物理机异常宕机了,目前该物理机已恢复,需要重启上面部署的应用. 这时瞬间没有了睡意,登上堡垒机,快速重启了应用,系统恢复正常.本想着继续午睡,但 ...

  4. spring4.1及以下跨域配置

    springMVC4.1及以下,就需要对该请求配置filter,,设置请求头可支持跨域 1.web.xml配置 <!-- 跨域问题解决 --> <filter> <fil ...

  5. 外贸网站SEO优化哪家公司好

    http://www.wocaoseo.com/thread-98-1-1.html        随着b2c的崛起,越来越多的企业已经放弃挂在第三方面台销售,而是选择去建独立的商场,拥有一个属于自已 ...

  6. Qt 改变鼠标形状

    Qt 改变鼠标形状(转载) 改变鼠标形状,在绘制坐标系的时候有用到,特此记下: 1 this->setMouseTracking(true); //设置为不按下鼠标键触发moveEvent 2 ...

  7. Git深入浅出使用教程:Git安装、远程控制、常用命令(全)

    一.软件安装 1.先安装[Git-2.24.1.2-64-bit.exe]软件.(官网下载的很慢,可以在百度云盘下载我的) 链接:https://pan.baidu.com/s/1uoIS9DWSBp ...

  8. oeasy教您玩转linux010106这儿都有啥 ls

    回忆上次内容 上个实验我们查询了 ls 的手册: man ls

  9. 入门的艰难——关于LR的使用

    这年头做一件事真是TM不容易啊.做测试也很纠结,不是都说商业工具很强大么,我去,这个不支持那个不支持的,这还有什么搞头,还非要按照你说的这个版本的才行,高一点的就crash了,结果连最初级的录制脚本都 ...

  10. HDU - 6570 - Wave(暴力)

    Avin is studying series. A series is called "wave" if the following conditions are satisfi ...