1. 使用视图组件进行接口优化
1.1 使用视图组件的mixin进行接口逻辑优化
- 导入mixin
from rest_framework.mixinx import (
ListModelMix,
CreateModelMixin,
DestroyModelMixin,
UpdateModelMixin,
RetrieveModelMixin
)
from rest_framework.generics import GenericAPIView - 定义序列化类
Class BookSerializer(serializers.ModelSerializer):
class Meta:
Book
fields = ()
extra_kwargs = {"field_name": {"write_only": True}} - 导入序列化类
from .app_serializers import BookSerializer - 定义视图类
class BookView(ListModelMix, CreateModelMixin, GenericAPIView):
# queryset和serializer_class是固定的写法
queryset = Book.objects.all()
serializer_class = BookSerializer def get():
return self.list() def post():
return self.create() class BookFilterView(RetrieveModelMixin, DestroyModelMixin, UpdateModelMixin, GenericAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer def get():
return self.retrieve() def delete():
return self.destroy() def put():
return self.update() 注意:单条数据操作的url是这样的:re_path(r'books/(?P<pk>\d+)/$, views.BookFilterView.as_view()) 实例:
 # class BookView(ListModelMixin,CreateModelMixin,GenericAPIView):
# queryset = Book.objects.all()
# serializer_class = BookSerializer
# 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 BookFilterView(RetrieveModelMixin, DestroyModelMixin, UpdateModelMixin, GenericAPIView):
# queryset = Book.objects.all()
# serializer_class = BookSerializer
# def put(self,request,*args,**kwargs):
# # 更改的时候区分一对多还是多对多
# return self.update(request,*args,**kwargs)
# def get(self,request,*args,**kwargs):
# return self.retrieve(request,*args,**kwargs)
# def delete(self,request,*args,**kwargs):
# return self.destroy(request,*args,**kwargs)

class类

 class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = ('title',
'price',
'publish',
'authors',
'author_list',
'publish_name',
'publish_city'
)
# 如过不加会实在页面显示关联的数字
extra_kwargs = {
'publish': {'write_only': True},
'authors': {'write_only': True}
} publish_name = serializers.CharField(max_length=32, read_only=True, source='publish.name')
publish_city = serializers.CharField(max_length=32, read_only=True, source='publish.city') author_list = serializers.SerializerMethodField() def get_author_list(self, book_obj):
# 拿到queryset开始循环 [{}, {}, {}, {}]
authors = list() for author in book_obj.authors.all():
authors.append(author.name) return authors

引入ModelSerializer

     #re_path(r'books/$', views.BookView.as_view()),
#re_path(r'books/(?P<pk>\d+)/$', views.BookFilterView.as_view()),

url

这时,会发现代码可以继续优化

1.2 使用视图组件的view进行接口逻辑优化
- 导入模块
from rest_framework import generics - 写视图类
class BookView(generics.ListCreateAPIView)
queryset = Book.objects.all()
serializer_class = BookSerializer class BookFilterView(generics.RetrieveUpdateDestroyAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
 # class BookView(generics.ListCreateAPIView):
# queryset = Book.objects.all()
# serializer_class = BookSerializer
#
# class BookFilterView(generics.RetrieveUpdateDestroyAPIView):
# queryset = Book.objects.all()
# serializer_class = BookSerializer

代码优化

     # path("course/",views.BookView.as_view()),
# re_path("course/(?P<pk>\d+)/",views.BookFilterView.as_view())

url


1.3 使用视图组件的viewset进行接口逻辑优化
- 导入模块
from rest_framework.viewsets import ModelViewSet - 设计url
re_path(r'books/$, views.BookView.as_view({
'get': 'list',
'post': 'create'
})),
re_path(r'books/(?P<pk>\d+)/$', views.BookView.as_view({
'get': 'retrieve',
'delete': 'destroy',
'put': 'update'
})) - 设计视图类
class BookView(ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer
 class BookView(ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer

最终版

     re_path("course/$",views.BookView.as_view({
"get":"list",
"post":'create',
})),
re_path("course/(?P<pk>\d+)/",views.BookView.as_view({
'get':'retrieve',
'put':"update",
'delete':"destroy"
}))

urls


django rest framework 解析器组件 接口设计,视图组件 (2)的更多相关文章

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

    一.解析器组件 -解析器组件是用来解析用户请求数据的(application/json), content-type 将客户端发来的json数据进行解析 -必须适应APIView -request.d ...

  2. Django REST framework - 解析器和渲染器

    目录 Django REST framework - 解析器和渲染器 解析器 Django中的数据解析 DRF中的解析器 渲染器 Django REST framework - 解析器和渲染器 解析器 ...

  3. 07 Django REST Framework 解析器与渲染器

    01-解析器 REST 框架包括一些内置的Parser类,允许你接受各种媒体类型的请求.还支持定义自己的自定义解析器,这使你可以灵活地设计API接受的媒体类型. 注意: 开发客户端应用程序时应该始终记 ...

  4.  Django REST framework解析器和渲染器

    解析器 解析器的作用 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己可以处理的数据.本质就是对请求体中的数据进行解析. 在了解解析器之前,我们要先知道Accept以及ContentTy ...

  5. 3- vue django restful framework 打造生鲜超市 - model设计和资源导入

    3- vue django restful framework 打造生鲜超市 - model设计和资源导入 使用Python3.6与Django2.0.2(Django-rest-framework) ...

  6. spring mvc: 多解析器映射(资源绑定视图解析器 + 内部资源[普通模式/]视图解析器)

    spring mvc: 多解析器映射(资源绑定视图解析器 + 内部资源[普通模式/]视图解析器) 资源绑定视图解析器 + 内部资源(普通模式)视图解析器 并存方式 内部资源视图解析器: http:// ...

  7. admin源码解析以及仿照admin设计stark组件

    ---恢复内容开始--- admin源码解析 一 启动:每个APP下的apps.py文件中. 首先执行每个APP下的admin.py 文件. def autodiscover(): autodisco ...

  8. 序列化组件(get/put/delete接口设计),视图优化组件

    一 . 知识点回顾 1 . 混入类 , 多继承 class Animal(object): def eat(self): print("Eat") def walk(self): ...

  9. rest framework 解析器,渲染器

    解析器 解析器的作用 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己可以处理的数据.本质就是对请求体中的数据进行解析. 请求体相关字段: Accept:指定了接收的数据类型 Conte ...

随机推荐

  1. 第09组 Beta冲刺(5/5)

    队名:观光队 链接 组长博客 作业博客 组员实践情况 王耀鑫 过去两天完成了哪些任务 文字/口头描述 学习 展示GitHub当日代码/文档签入记录 无 接下来的计划 无 还剩下哪些任务 s 答辩 遇到 ...

  2. TJOI 2015 概率论(生成函数)

    题意 ​ 求一棵随机生成的有根二叉树(节点无标号,各种不同构的情况随机出现)叶子结点个数的期望. 思路 ​ 用生成函数做是个好题. ​ 我们考虑设 \(n\) 个节点,所有不同构二叉树叶子结点的总和为 ...

  3. Python 爬取 13 个旅游城市,告诉你五一大家最爱去哪玩?

    五一假期已经结束,小伙伴是不是都还没有玩过瘾?但是没办法,还有很多bug等着我们去写,同样还有需要money需要我们去赚.为了生活总的拼搏. 今年五一放了四天假,很多人不再只是选择周边游,因为时间充裕 ...

  4. nginx学习笔记2

    nginx基础配置 一.nginx常用命令 nginx -s reload:在nginx已经启动的情况下重新加载配置文件(平滑重启) nginx -s reopen:重新打开日志文件 nginx -c ...

  5. asp.net core 3.0 身份认证 替换为自已的提供程序 AuthenticationStateProvider replace to SelfAuthenticationStateProvider

    public void ConfigureServices(IServiceCollection services) { // 添加身份验证服务 services.AddAuthorizationCo ...

  6. Python 中 如何将两个列表元素一一对应成字典

    使用python的 zip函数 和强大的集合操作可以方便的将两个list元素一一对应转换为dict,如下示例代码: names = ['n1','n2','n3'] values = [1,2,3] ...

  7. JDK1.8--API

    链接:https://pan.baidu.com/s/1mNlMIS1_8wFuQZ2vl2eTGg 提取码:e4yr

  8. HUSKY CLOCK1.0上线啦!

    有人需要HUSKY CLOCK1.0下载资源的请联系1335415335@qq.com! 感谢支持,您的认可是我们前进的动力!

  9. Hash函数浅谈

    Hash函数是指把一个大范围映射到一个小范围.把大范围映射到一个小范围的目的往往是为了节省空间,使得数据容易保存. 除此以外,Hash函数往往应用于查找上.所以,在考虑使用Hash函数之前,需要明白它 ...

  10. Scala 系列(五)—— 集合类型综述

    一.集合简介 Scala中拥有多种集合类型,主要分为可变的和不可变的集合两大类: 可变集合: 可以被修改.即可以更改,添加,删除集合中的元素: 不可变集合类:不能被修改.对集合执行更改,添加或删除操作 ...