首页 > 其他分享 >【DRF-13】rest-framework之视图三部曲

【DRF-13】rest-framework之视图三部曲

时间:2024-06-05 22:57:07浏览次数:12  
标签:13 mixins self args request 视图 framework kwargs class

  • 一.mixin类编写视图
    • 1.视图
class AuthorModelSerializer(serializers.ModelSerializer):
    class Meta:
        model=models.Author
        fields='__all__'

from rest_framework import mixins,generics
class Authors(mixins.ListModelMixin,mixins.CreateModelMixin,generics.GenericAPIView):
    queryset = models.Author.objects.all()
    serializer_class = AuthorModelSerializer

    def get(self,request,*args,**kwargs):
        return self.list(request,*args,**kwargs)

    def post(self,request,*args,**kwargs):
        return self.create(request,*args,**kwargs)

class AuthorsDetailView(mixins.RetrieveModelMixin,mixins.UpdateModelMixin,mixins.DestroyModelMixin,generics.GenericAPIView):
    queryset = models.Author.objects.all()
    serializer_class = AuthorModelSerializer
    def get(self,request,*args,**kwargs):
        return self.retrieve(request,*args,**kwargs)

    def put(self,request,*args,**kwargs):
        return self.update(request,*args,**kwargs)

    def delete(self,request,*args,**kwargs):
        return self.delete(request,*args,**kwargs)
  • 2.路由
  re_path(r'^(?P<version>[v1|v2]+)/author/$', views.AuthorView.as_view()),
  re_path(r'^(?P<version>[v1|v2]+)/author/(?P<pk>\d+)$', views.AuthorDetailView.as_view()),
  • 3.注意点

    • 3.1:queryset ,serializer_class 这两个变量是必须得,queryset告知这个类这次处理的数据,serializer_class告知这个类数据处理用到的序列化组件
    • 3.2:五类mixins作用和对应的http方法
  • 二:使用通用的基于类的视图

    • 1.试图
# 第一种:mixin模块+generics模块(GenericAPIView类)编写视图
from rest_framework import mixins
from rest_framework import generics

class AuthorView(
        mixins.ListModelMixin,
        mixins.CreateModelMixin,
        generics.GenericAPIView
    ):
    # GenericAPIView继承了之前的APIView
    # !!!切记:queryset和serializer_class 这两个名字不能改!!!
    queryset = Author.objects.all()
    serializer_class = AuthorModelSerializers
    def get(self,request,*args,**kwargs):
        return self.list(request,*args,**kwargs)
    def post(self,request,*args,**kwargs):
        return self.create(request,*args,**kwargs)

class AuthorDetailView(
        mixins.RetrieveModelMixin,
        mixins.DestroyModelMixin,
        mixins.UpdateModelMixin,
        generics.GenericAPIView
    ):
    queryset = Author.objects.all()
    serializer_class = AuthorModelSerializers
    def get(self,request,*args,**kwargs):
        return self.retrieve(request,*args,**kwargs)
    def put(self,request,*args,**kwargs):
        return self.update(request,*args,**kwargs)
    def delete(self,request,*args,**kwargs):
        return self.destroy(request,*args,**kwargs)

# 第二种:generics模块下的ListCreateAPIView,RetrieveUpdateDestroyAPIView
class AuthorView(generics.ListCreateAPIView):
    queryset = Author.objects.all()
    serializer_class = AuthorModelSerializers

class AuthorDetailView(generics.RetrieveUpdateDestroyAPIView):
    queryset = Author.objects.all()
    serializer_class = AuthorModelSerializers
  • 2.路由
  re_path(r'^(?P<version>[v1|v2]+)/author/$', views.AuthorView.as_view()),
  re_path(r'^(?P<version>[v1|v2]+)/author/(?P<pk>\d+)$', views.AuthorDetailView.as_view()),
  • 3.注意点

    • 通过使用mixin类,我们使用更少的代码重写了这些视图,但我们还可以再进一步。REST框架提供了一组已经混合好(mixed-in)的通用视图,我们可以使用它来简化我们的views.py模块。
    • 到这里是第二部,但是我们还是需要实例化两个类来对应两个url,为什么要实例两个类,因为每个类都有get方法.
  • 三:viewsets模块下的ModelViewSet

    • 1.试图:
from rest_framework import viewsets
class AuthorModelView(viewsets.ModelViewSet):
    queryset = models.Author.objects.all()
    serializer_class = AuthorModelSerializer
  • 2.路由:
path('authors/', views.AuthorModelView.as_view({'get':'list','post':'create'}),name='authors'),
re_path(r'^authors/(?P<pk>\d+)/$', views.AuthorModelView.as_view({'get':'retrieve',
                                                                   'put':'update',
                                                                    'delete':'destroy'}),name='authors_detail'),
  • 四.总结

标签:13,mixins,self,args,request,视图,framework,kwargs,class
From: https://www.cnblogs.com/xwltest/p/18234089

相关文章

  • 4.13
    android成功增进数据库bean1234567891011121314151617181920212223242526272829303132333435363738394041package Bean; public class causebean{    public StringgetCoursenumber(){        retu......
  • 【DRF-12】rest-framework之路由
    路由控制介绍:我们之前一直接触的路由是最基本的形式,就是我们下面介绍的第一种方式的自定义路由,无论是FBV还是CBV,都可以使用这用方式来设置路由来设定请求来的时候对应响应视图的函数或者视图类当我们使用封装了的视图类处理代码的时候,我们就可以使用对应的半自动路由......
  • #线段树#CF1371F Raging Thunder
    洛谷传送门CF1371F分析其实掉出区间边界或洞内就算消失,最终球只会掉到最左侧的<,中间的><,和最右侧的>在线段树上维护左右边界上最长的<,>,<>,><和区间内最长的<>,><即可代码#include<cstdio>#include<cctype>#include<algorithm>usingnamespacestd;constintN......
  • Android Audio模块 音量增益 framework到HAL 层加载流程
    目录背景概念AndroidAudio调用流程(app-framework-HAL)标记0libaudioclient标记1libaudioclient:aps变量赋值标记1.1binder变量赋值标记2audiopolicy标记4audiopolicy:mAudioPolicyManager变量赋值标记5audiopolicy标记6audiopolicy:mpClientInterface变量赋值标......
  • 51单片机学习记录-07-时钟芯片DS1302
    1DS1302介绍DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能RTC(RealTimeClock):实时时钟,是一种集成电路,通常称为时钟芯片2 引脚定义和应用电路3 内部结构框图4......
  • Gitlab Runner在Windows如何自动发布基于.NET Framework 4.8的传统ASP.NET Web应用程
    摘要软件流水线能把程序员从繁琐的发布工作中解脱出来,但是跑在WindowsIIS里的传统Web应用程序,用Docker的方式不是最方便的。本文详细描述如何用Windows的OpenSSHServer来上传网站后,用PowerShell创建和修改IIS的虚拟目录应用程序。一、自动打包传统ASP.NETWeb应用程序1、Gitl......
  • 5.13
    数据库实验报告三--创建数据库角色CREATEROLE[20224082-role];GO--将用户添加到角色ALTERROLE[20224082-role]ADDMEMBER[20224082-user];GO usestudents go grantupdateonStudent(Sname,Ssex,Sage)to[20224074-user] gograntselectonStuden......
  • 【教学类-13-05】20240604《数字色块图-5*7*8-A4横板-横切》中4班
    背景需求:【教学类-13-04】20230404《数字色块图+判断密码是否正确-5*7*8-A4横板-横切》(中班主题《我爱我家》)_图案密码色块-CSDN博客文章浏览阅读530次。【教学类-13-04】20230404《数字色块图+判断密码是否正确-5*7*8-A4横板-横切》(中班主题《我爱我家》)_图案密码色块......
  • 【DRF-11】rest-framework之分页
    前言:总共有三种分页方式1.根据页码进行分页,看第n页,每页显示n条数据;fromrest_framework.paginationimportPageNumberPaginationclassPageGroupSerializer(serializers.ModelSerializer):classMeta:model=models.UserGroupfields='__all__'......
  • 公安视频图像信息数据库及GA/T 1400视图库视频监控系统的使用场景
    随着科技的快速发展,大数据、人工智能等新技术不断融入各行各业,为各行各业带来了前所未有的变革。在公安领域,GA/T1400协议公安视频图像信息数据库的应用为视频监控场景提供了强有力的支持,极大地提升了公安工作的效率和准确性。一、公安视频图像信息数据库组成1、公安视频图像......