drf视图组件

一 基本视图

写一个出版社的增删查改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 settingsfrom 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‘]
            }

原文地址:https://www.cnblogs.com/liweiwei0307/p/10133639.html

时间: 2024-08-30 15:58:00

drf视图组件的相关文章

DRF之视图组件

一.知识回顾: 1.RESTful api接口规范 (1).REST最重要的一句话: url用来唯一定位资源,http请求方式用来定位用户行为. (2).设计RESTful api 2.混入类, 多继承 (1).我有一个Animal类,它包含如下方法: class Animal(object): def eat(self): print("Eat") def walk(self): print("Walk") def sleep(self): print("

DRF Django REST framework 之 视图组件(四)

引言 在我们有几十上百的视图类,都有get,post等方法,在功能类似时,会导致大量的重复代码出现,显然还有很多可以优化的地方.这也就有了视图组件,它的功能非常强大,能很好的优化接口逻辑. 视图组件 使用视图组件的mixin优化接口逻辑 导入 mixins 定义序列化类 定义视图类 # 1.导入mixins from rest_framework.mixins import ( ListModelMixin, CreateModelMixin, DestroyModelMixin, Update

django rest framework 解析器组件 接口设计,视图组件 (1)

一.解析器组件 -解析器组件是用来解析用户请求数据的(application/json), content-type 将客户端发来的json数据进行解析 -必须适应APIView -request.data触发 二.序列化组件 2.1.django 自带组件serializer 2.1.1 from django.serializers import serialize2.1.2 origin_data = Book.objects.all()2.1.3 serialized_data = se

视图组件和认证组件

1.使用mixin和generics类编写视图 from rest_framework.mixins import CreateModelMixin, ListModelMixin, DestroyModelMixin, RetrieveModelMixin, UpdateModelMixin from rest_framework.generics import GenericAPIView class BooksView(CreateModelMixin, ListModelMixin, G

认证、权限、视图组件

drf组件 认证组件 models.py class User(models.Model): name = models.CharField(max_length=32) pwd = models.CharField(max_length=32) user_type = models.IntegerField(choice=(1,'超级管理员'),(2,'普通管理员'),(3,'用户')) #token跟uesr表做一对一关联 class Token(models.Model): user =

DjangoRestFramework学习二之序列化组件、视图组件

目录 DjangoRestFramework学习二之序列化组件.视图组件 一 序列化组件 二 视图组件(Mixin混合类) DjangoRestFramework学习二之序列化组件.视图组件 本节目录 一 序列化组件 首先按照restful规范咱们创建一些api接口,按照下面这些形式写吧: Courses --- GET ---> 查看数据----->返回所有数据列表[{},{},] Courses--- POST --->添加数据 -----> 返回添加的数据{ } course

19.DjangoRestFramework学习二之序列化组件、视图组件

一 序列化组件 首先按照restful规范咱们创建一些api接口,按照下面这些形式写吧: Courses --- GET ---> 查看数据----->返回所有数据列表[{},{},] Courses--- POST --->添加数据 -----> 返回添加的数据{ } courses/1 ---PUT---> 更新pk=1的数据 ----->返回更新后的数据{ } courses/1 --- DELETE---> 删除pk=1的数据 -----> 返回空

DRF ---- 过滤组件 分页组件 过滤组件插件使用

目录 DRF过滤组件 1 源码分析: 2 全局配置 过滤 类们 3 局部配置 过滤 类们 4 系统提供 过滤 类们 OrderingFilter(排序过滤) SearchFilter(查询过滤) 联合使用 DRF分页组件 1 全局配置 2 局部配置 3 PageNumberPagination基础分页 4 LimitOffsetPagination偏移分页 5 CursorPagination游标分页 加密分页(了解) 6.自定义过滤器 7 django-filter 过滤插件(重点) 安装 自

7. Laravel5学习笔记:如何定义自己的视图组件

视图组件 视图组件就是在视图被渲染前,会调用的闭包或类方法.如果你想在每次渲染某些视图时绑定数据,视图组件可以把这样的程序逻辑组织在同一个地方. 对上面的话,理解如下: 这个php代码运行的时间是在渲染视图之前 使用这个组件应该用于每次渲染时,都要绑定数据的视图上.这样子就可以从控制器分离出数据绑定逻辑. 它很好的提现了 单一职责 ,对它的概念阐述 请看这里 使用 在laravel5的文档中已经说明了如何构建自己的视图组件.这里在重复一下. 先构建一个视图组件: <?php namespace