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 ...
随机推荐
- java实现邮箱发送信息--验证码的发送(163邮箱)
1.maven环境 <!-- 发送邮件 --> <dependency> <groupId>javax.mail</groupId> <artif ...
- MySQL主从同步简单介绍&配置
介绍: 现在mysql集群基本上都是使用一主多从方式,实现读写分离(主库写.从库读).负载均衡.数据备份,以前只是使用从未配置过,今天简单配置一下! mysql主从复制是通过binary log日志实 ...
- Qt 怎样生成带图标的exe
一.问题描述 当我们在 Windows 下用 VS 生成 exe 程序时,如果窗口程序指定了图标,那么生成的 exe 程序便是指定的图标模样. 但是,当使用 Qt Creator 编译程序却不同.即使 ...
- gdb我在我本机上p不了,在别人机子上可以
gdb我在我本机上p不了,在别人机子上可以,不知道什么 (gdb) p EventFlow->devicetypeThere is no member or method named devic ...
- PJSIP开发指南-第二章
一.模块 2.1 模块框架 模块框架的主要作用是在应用程序组件之间分发SIP消息,PJSIP的所有的组件,包括dialog和transaction都是以模块方式实现的,没有模块,核心协议栈将不知 ...
- Labview学习之路(十)文本文件再次写入不覆盖
- 程序员软件开发最好的IDE集成工具eclipse各个版本的详细介绍。详细介绍,送给初学者的朋友
对于刚接触软件开发的初学者,在下载eclipse时,对官网上面提供的各种版本的选择犹豫不决.下面将对常用的几个版本进行介绍. Eclipse版本 Eclipse Standard 该版本是eclips ...
- 简单介绍HTML5 Landmark
最近在进行无障碍相关文档翻译的时候遇到了 landmark 的概念,在网上搜了下发现没有相关的中文资料,因此写一篇博客简单介绍一下. 什么是 Landmark Landmark 是一种用来表示网页组织 ...
- 13_Python的面向对象编程-类class,对象object,实例instance
1.面向对象概述 1.类是用来描述对象的工具,把拥有相同属性和行为的对象分为一组 2.对象是由类实例化出来的一个具体的对象 属性: 对象拥有的名词,用变量表示 ...
- Zabbix housekeeper processes more than 75% busy
原因分析 为了防止数据库持续增大,Zabbix有自动删除历史数据的机制,即housekeeper,而在频繁清理历史数据的时候,MySQL数据库可能出现性能降低的情况,此时就会告警. 一般来说,Zabb ...