drf视图组件(代码片段)

liweiwei0307 liweiwei0307     2023-02-05     787

关键词:

一 基本视图

写一个出版社的增删查改resful接口

 路由:

url(r^publish/$, views.PublishView.as_view()),
url(r^publish/(?P<pk>d+)/$, views.PublishDetailView.as_view()),
视图:
class PublishSerializers(serializers.ModelSerializer):
    class Meta:
        model=models.Publish
        fields=__all__

class PublishView(APIView):

    def get(self, request):
        publish_list = models.Publish.objects.all()
        bs = PublishSerializers(publish_list, many=True)
        # 序列化数据

        return Response(bs.data)

    def post(self, request):
        # 添加一条数据
        print(request.data)

        bs=PublishSerializers(data=request.data)
        if bs.is_valid():
            bs.save()  # 生成记录
            return Response(bs.data)
        else:

            return Response(bs.errors)

class PublishDetailView(APIView):
    def get(self,request,pk):
        publish_obj=models.Publish.objects.filter(pk=pk).first()
        bs=PublishSerializers(publish_obj,many=False)
        return Response(bs.data)
    def put(self,request,pk):
        publish_obj = models.Publish.objects.filter(pk=pk).first()

        bs=PublishSerializers(data=request.data,instance=publish_obj)
        if bs.is_valid():
            bs.save() # update
            return Response(bs.data)
        else:
            return Response(bs.errors)
    def delete(self,request,pk):
        models.Publish.objects.filter(pk=pk).delete()

        return Response("")

二 mixin类和generice类编写视图

from rest_framework.generics import GenericAPIView
from rest_framework.mixins import ListModelMixin, CreateModelMixin,RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin
class PublishView(GenericAPIView, ListModelMixin, CreateModelMixin):
    queryset = Publish.objects.all()
    serializer_class = PublishSerializers

    def get(self, request):
        return self.list(request)

    def post(self, request):
        # 添加一条数据
        return self.create(request)

三 使用generics 下ListCreateAPIView,RetrieveUpdateDestroyAPIView

from rest_framework.generics import ListCreateAPIView

class PublishView(ListCreateAPIView):
    queryset = Publish.objects.all()
    serializer_class = PublishSerializers

四 使用ModelViewSet

路由:url(r^publish/$, views.PublishView.as_view(get: list, post: create)),
    url(r^publish/(?P<pk>d+), views.PublishView.as_view(get: retrieve, put: update,delete:destroy)),

from rest_framework.viewsets import ModelViewSet
class PublishView(ModelViewSet): queryset = Publish.objects.all() serializer_class = PublishSerializers

五 ViewSetMixin 

用了它之后,视图类中不需要写get,post,put方法了,自己定义方法就可以了,让请求方法对应到自己定义的方法上,配置路由
from django.conf import settings
from rest_framework.viewsets import ViewSetMixin
# 注意先后顺序,ViewSetMixin写在前面
class TestAll(ViewSetMixin, APIView):
    def test(self, request):
        print(settings.DEBUG)

        return HttpResponse(test)

    def test2(self, request):
        return HttpResponse(test2)

    def test3(self, request):
        return HttpResponse(test3)
路由
url(r‘^test1/$‘, views.TestAll.as_view(‘get‘: ‘test‘)),
url(r‘^test2/$‘, views.TestAll.as_view(‘get‘: ‘test2‘)),
url(r‘^test3/$‘, views.TestAll.as_view(‘get‘: ‘test3‘)),

 路由控制

三种:
  -一种基本路由: url(r^publish/$, views.PublishView.as_view()),
  -半自动路径: views.PublishView.as_view(get: list, post: create))
  -必须继承: ViewSetMixin
       - 继承ViewSetMixin的先后顺序
       - 全自动路由:(基本不用)
               -
from rest_framework import routers

# 生成一个router对象
router = routers.DefaultRouter()
# 需要传两个参数,第一个参数就是匹配的路径,第二个参数,是视图类
router.register(publish, views.PublishView)

url(‘‘, include(router.urls)),
# 自动生成四个路由(PublishView必须继承ModelViewSet)

响应器:(基本上不需要配置)

局部配置
    视图类中:
        -renderer_classes=[JSONRenderer,BrowsableAPIRenderer]
    全局配置
        在setting中:
            REST_FRAMEWORK = 
                DEFAULT_RENDERER_CLASSES:[rest_framework.renderers.JSONRenderer]
            

 

drf之视图组件(代码片段)

不断的优化我们写的程序,是每个程序员必备的技能和职业素养,也是帮助我们成长的非常重要的手段。相关知识点相关知识点一:RESTfulapi接口规范我给大家总结的REST的最重要的一句话,那就是:url用来唯一定位资源,http请求... 查看详情

drf视图组件(代码片段)

一基本视图写一个出版社的增删查改resful接口 路由:url(r‘^publish/$‘,views.PublishView.as_view()),url(r‘^publish/(?P<pk>d+)/$‘,views.PublishDetailView.as_view()),视图:classPublishSerializers(serializers.ModelSerializer):classMeta:model=models.Publishfields=‘_... 查看详情

django-rest-framework---总结(代码片段)

...与反序列化整合(重点)3.整体单改4.单与整体局部修改视图类视图类传递参数给序列化类二次封装Response类视图家族GenericAPIView基类mixins视图工具集-辅助GenericAPIView工具视图视图集GenericAPIView与APIView最为两大继承视图的区别工具... 查看详情

drf框架(代码片段)

...入库三大认证组件:认证组件、权限组件(RBAC)、频率组件视图家族:View一系列组件五、群查接口相关组件:搜索、筛选、排序、分页DRF学习目的:必须掌握六大基础接口:单查、群查、单增、单局部改、单整体改、单删一共十... 查看详情

drf-过滤组件(代码片段)

...tPagination游标分页CursorPaginationfilter过滤类源码分析我们从视图类中群查接口入口,去看看它内部是怎么实现过滤的首先我们进入ListAPIView类中实现群查功能的是它的第一个父类mixins中调用的,我们进入它的第一个父类我们看到它... 查看详情

drf之视图组件(代码片段)

一.知识回顾:1.RESTfulapi接口规范(1).REST最重要的一句话: url用来唯一定位资源,http请求方式用来定位用户行为。(2).设计RESTfulapi2.混入类,多继承(1).我有一个Animal类,它包含如下方法:classAnimal(object):defeat(self):print("Eat")defwalk(self... 查看详情

drf08(代码片段)

...频率组件自定义token的签发三大认证流程由于DRF中,所有的视图类都要直接和间接继承APIView类,也只有APIView类中才有dispatch方法,所以所有的请求都要经过三大认证,认证通过后执行相应请求的视图函数defdispatch(self,request,*args,**kwargs):... 查看详情

drf路由组件(代码片段)

当一个视图有list、create、retrieve、update、destroy所有的功能,路由组件可以用DRF自带的routers简写项目总路由:pro/urls.pyfromdjango.contribimportadminfromdjango.urlsimportpath,includeurlpatterns=[path(‘admin/‘,admin.site.urls),path(‘books/‘,include(‘books.u... 查看详情

drf序列化组件(代码片段)

...化的字段,想序列化哪个字段,就在类中写哪个字段3在视图类中使用,导入--》实例化得到序列化类的对象,把 查看详情

视图组件,路由组件(代码片段)

DRF的视图APIView我们django中写CBV的时候继承的是View,rest_framework继承的是APIView,那么他们两个有什么不同呢~~~?urlpatterns=[    url(r‘^book$‘,BookView.as_view()),    url(r‘^book/(?P<id> 查看详情

drf框架路由组件(代码片段)

视图组件涉及的路由补充:  fromrest_framework.viewsetsimportViewSetMixin  对路由进行了重新的分发,重写了as_view()方法,重新封装了请求方法fromrest_framework.viewsetsimportViewSetMixinclassViewSetMixin(object):"""Thisisthemagic.Overrides`.as_view()`sothati... 查看详情

drf4视图与路由组件(代码片段)

...么赋值给了request,并且赋值给了self.request,也就是我们在视图中用的request.xxx到底是什么~~ 看到,这个方法返回的是Request这个类的实例对象~~我们注意我们看下这个Request类中的第一个参数request,是我们走我们django的时候的原... 查看详情

drf分页器组件(代码片段)

...一、使用drf分页器一、使用drf分页器drf的GenericAPIView这个视图基类提供了三种分页器:但是这里只列举两个,个人认为,最后一个没什么用PageNumberPagination类(常用)作用:一页显示的条数#url:示例http://http://127.0.0.1:8000/books/?page=2... 查看详情

drf--路由组件和版本控制(代码片段)

...例化DefaultRouter对象router=DefaultRouter()#注册我们的路由以及视图router.register(r‘^book‘,BookModelView)urlpatterns=[]#把我们注册的路由添加到里面urlpatterns+=router.urls我们在浏览器里输入错误的地址看DRF都给我们生成了哪些路由^api/^^book/$[nam... 查看详情

drf序列化大总结(代码片段)

目录一、APIView的请求生命周期二、序列化组件视图类中使用序列化Meta配置类中的配置自定义校验规则入库方法自定义字段如果有群改操作重(难)点三、视图家族四、路由组件五、权限认证一、APIView的请求生命周期'''1)... 查看详情

drf序列化组件(代码片段)

目录在视图中手动完成序列化操作Serializer序列化Serializer序列化总结:Serializer反序列化Serializer反序列化总结:ModelSerializer序列化与反序列化ModelSerializer序列化与反序列化总结:在视图中手动完成序列化操作#view.pyclassUserV1ApiView(AP... 查看详情

drf框架知识总览(代码片段)

...入库三大认证组件:认证组件、权限组件(RBAC)、频率组件视图家族:View一系列组件5)群查接口相关组件:搜索、筛选、排序、分页目的:必须掌握:六大基础接口-单查、群查、单增、单局部改、单整体改、单删一共十大接口-... 查看详情

drf视图(代码片段)

2个视图基类APIView(rest_framework.views.APIView)APIView是RESTframework提供的所有视图的基类,继承自Django的View父类。APIView与View的不同之处在于:传入到视图方法中的是RESTframework的Request对象,而不是Django的HttpRequeset对象;视图方法可以返... 查看详情