Django中rest_framework的APIView,序列化组件和视图组件

url

urlpatterns = [
    url(r‘^admin/‘, admin.site.urls),
    url(r‘^books/$‘, views.BookHandle.as_view()),
    url(r‘^books/(\d+)‘, views.GetBookHandle.as_view()),

    url(r‘^publishs/$‘, views.PublishHandel.as_view()),
]

  

views

#####################################################
# request => Request => request.data  (APIView执行流程,且封装了一些组件)
from rest_framework.views import APIView
from rest_framework import serializers     # 序列化组件
from rest_framework.response import Response    # 给前端返回消息
from app01 import models

# get,post,delete方法 用到的序列化组件
class BookSerializer(serializers.ModelSerializer):

    class Meta:
        model = models.Book
        fields = ‘__all__‘

# get方法 用到的序列化组件
class BookSerializer_get(serializers.ModelSerializer):

    class Meta:
        model = models.Book
        fields = ‘__all__‘  # 拿到Book表的所有字段[‘price‘,‘title‘]

        # 除了Book表的price字段(拿到其他所有字段),exclude不能和fields同时用
        # exclude = (‘price‘,)

    #针对多对一字段的序列化,里面有source=‘‘,里面写关联的字段名字.被关联表的字段
    publish = serializers.CharField(max_length=32, source=‘publish.name‘)

    #针对多对多字段的序列化
    authors = serializers.SerializerMethodField()
    # 多对多字段名前面加get_ 自动执行该方法.传入的参数就是Book表的model对象
    def get_authors(self,obj):
        lis = []
        authors_obj = obj.authors.all()
        for author_obj in authors_obj:
            dic = {}
            dic[‘name‘] = author_obj.name
            lis.append(dic)
        return  lis

# 应用序列化组件
class BookHandle(APIView):

    def get(self,request):
        book_list_obj = models.Book.objects.all()
        # get方法时,自定义序列化参数是查询的到的表的model对象,many

        msg = BookSerializer_get(book_list_obj,many=True)
        return Response(msg.data)

    def post(self,request):
        # post,put方法时,这个自定义序列里面的参数是data=request.data,many
        msg = BookSerializer(data=request.data,many=False)
        if msg.is_valid():
            msg.save()  #create
            return Response(msg.data)
        else:
            return Response(msg.errors)

class GetBookHandle(APIView):

    def put(self,request,id):
        book_obj = models.Book.objects.filter(pk=id).first()
        msg = BookSerializer(data=request.data,many=False,instance=book_obj)
        if msg.is_valid():
            msg.save()
            return Response(msg.data)
        else :
            return Response(msg.errors)

    def delete(self,request,id):
        models.Book.objects.filter(pk=id).delete()
        return Response(‘‘)

    def get(self,request,id):
        book_obj = models.Book.objects.filter(pk=id).first()

        msg = BookSerializer_get(book_obj,many=False)
        return Response(msg.data)

#################视图组件##############

class PublishSerializer(serializers.ModelSerializer):

    class Meta:
        model = models.Publish
        fields = ‘__all__‘

from rest_framework.mixins import ListModelMixin
from rest_framework import generics

class PublishHandel(ListModelMixin,generics.GenericAPIView):
    queryset = models.Publish.objects.all()
    serializer_class = PublishSerializer

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

  

原文地址:https://www.cnblogs.com/gyc-tzx/p/11096260.html

时间: 2024-10-06 18:25:18

Django中rest_framework的APIView,序列化组件和视图组件的相关文章

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的数据 -----> 返回空

Django中rest_framework的认证组件,权限组件,频率组件,序列化组件的最简化版接口

url urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^login/', views.Login.as_view()), # Book表 url(r'^books/$',views.BookHandle.as_view({ 'get':'list', 'post':'create' })), url(r'^books/(?P<pk>\d+)/',views.BookHandle.as_view({ 'get':'retrieve

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

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

Django中Q搜索的简单应用

本节涉及: 1.Q搜索在前后端的设计 2.Django中Queryset对象的序列化(由后端扔给前端的数据必然会经过序列化) 3.前端动态地构造表格以便显示(动态创建DOM对象) 思路: 用户通过前端查询数据库内容时,可添加多个搜索框,一个搜索框内可以输入多个条件.同一搜索框内的条件是或OR关系,不同搜索框间是与AND关系.如搜索图书,每条图书信息包括名称.页数.印刷日期.类型,在一个搜索框内可选择搜索书名,以中文逗号分隔即可以书名同时搜索多本图书,同一搜索框内就是OR关系.又可以再添加输入框,

视图组件

视图组件 作者: Rick Anderson翻译: 娄宇(Lyrics)校对: 高嵩 章节: 介绍视图组件 创建视图组件 调用视图组件 演练:创建一个简单的视图组件 附加的资源 查看或下载示例代码 介绍视图组件 视图组件是 ASP.NET Core MVC 中的新特性,与局部视图相似,但是它们更加的强大.视图组件不使用模型绑定,只取决于调用它时所提供的数据.视图组件有以下特点: 渲染一个块,而不是整个响应 在控制器和视图之间同样包含了关注点分离和可测试性带来的好处 可以拥有参数和业务逻辑 通常从

ASP.NET Core Razor 视图组件

视图组件简介 在新的ASP.NET Core MVC中,视图组件类似于局部视图,但它们更强大.视图组件不使用模型绑定,仅依赖于您在调用时提供的数据. 视图组件特性: 呈现页面响应的某一部分而不是整个响应 包括在控制器和视图之间发现的关注分离和可测试性优势 可以具有参数和业务逻辑 通常在页面布局中调用 视图组件是在任何地方可重用的呈现逻辑,对于局部视图来说相对复杂,例如: 动态导航菜单 标签云(查询数据库) 登录面板 购物车 最近发表的文章 典型博客上的侧边栏内容 将在每个页面上呈现的登录面板,并

asp.net core 视图组件(转)

介绍视图组件 视图组件是 ASP.NET Core MVC 中的新特性,与局部视图相似,但是它们更加的强大.视图组件不使用模型绑定,只取决于调用它时所提供的数据.视图组件有以下特点: 渲染一个块,而不是整个响应 在控制器和视图之间同样包含了关注点分离和可测试性带来的好处 可以拥有参数和业务逻辑 通常从布局页调用 视图组件可以用在任何需要重复逻辑且对局部视图来说过于复杂的情况,比如: 动态导航菜单 标签云 (需要从数据库查询时) 登录面板 购物车 最近发表的文章 一个典型博客的侧边栏内容 会在所有

Django的rest_framework的权限组件和频率组件源码分析

前言: Django的rest_framework一共有三大组件,分别为认证组件perform_authentication,权限组件check_throttles: 我在前面的博客中已经梳理了认证组件,不知道大家有没有看懂:在这里我把认证的组件的博客地址在贴出来,不清楚的人可以看下 局部设置认证组件的博客:https://www.cnblogs.com/bainianminguo/p/10480887.html 全局设置认证组件的博客:https://www.cnblogs.com/baini