django rest framework 解析器组件 接口设计,视图组件 (2)
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)的更多相关文章
- django rest framework 解析器组件 接口设计,视图组件 (1)
一.解析器组件 -解析器组件是用来解析用户请求数据的(application/json), content-type 将客户端发来的json数据进行解析 -必须适应APIView -request.d ...
- Django REST framework - 解析器和渲染器
目录 Django REST framework - 解析器和渲染器 解析器 Django中的数据解析 DRF中的解析器 渲染器 Django REST framework - 解析器和渲染器 解析器 ...
- 07 Django REST Framework 解析器与渲染器
01-解析器 REST 框架包括一些内置的Parser类,允许你接受各种媒体类型的请求.还支持定义自己的自定义解析器,这使你可以灵活地设计API接受的媒体类型. 注意: 开发客户端应用程序时应该始终记 ...
- Django REST framework解析器和渲染器
解析器 解析器的作用 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己可以处理的数据.本质就是对请求体中的数据进行解析. 在了解解析器之前,我们要先知道Accept以及ContentTy ...
- 3- vue django restful framework 打造生鲜超市 - model设计和资源导入
3- vue django restful framework 打造生鲜超市 - model设计和资源导入 使用Python3.6与Django2.0.2(Django-rest-framework) ...
- spring mvc: 多解析器映射(资源绑定视图解析器 + 内部资源[普通模式/]视图解析器)
spring mvc: 多解析器映射(资源绑定视图解析器 + 内部资源[普通模式/]视图解析器) 资源绑定视图解析器 + 内部资源(普通模式)视图解析器 并存方式 内部资源视图解析器: http:// ...
- admin源码解析以及仿照admin设计stark组件
---恢复内容开始--- admin源码解析 一 启动:每个APP下的apps.py文件中. 首先执行每个APP下的admin.py 文件. def autodiscover(): autodisco ...
- 序列化组件(get/put/delete接口设计),视图优化组件
一 . 知识点回顾 1 . 混入类 , 多继承 class Animal(object): def eat(self): print("Eat") def walk(self): ...
- rest framework 解析器,渲染器
解析器 解析器的作用 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己可以处理的数据.本质就是对请求体中的数据进行解析. 请求体相关字段: Accept:指定了接收的数据类型 Conte ...
随机推荐
- 黑客最喜欢的15个Nmap扫描命令,熟练掌握你也能成为黑客大神
1.针对IP或主机的基本Nmap扫描 nmap IP 现在,如果要扫描主机名,只需替换主机的IP,如下所示: nmap 域名 2.扫描本地或远程服务器上的特定端口或扫描整个端口范围 nmap -p 1 ...
- 团队作业第五次—项目冲刺-Day3
Day3 part1-SCRUM: 项目相关 作业相关 具体描述 所属班级 2019秋福大软件工程实践Z班 作业要求 团队作业第五次-项目冲刺 作业正文 hunter--冲刺集合 团队名称 hunte ...
- [MSSQL]找出一天数据中从第一条数据开始每累加1小时的数据
用Sql Server找出一天数据中从第一条数据开始每累加1小时的数据 -- ============================================= -- Author: Alle ...
- pyqt 调用QT设计师创建的对话框
一.实验环境 1.Windows7x64_SP1 2.anaconda2.5.0 + python2.7(anaconda集成,不需单独安装) 3.pyinstaller3.0 二.实验步骤 2.1 ...
- 2017 ACM/ICPC Asia Regional Shenyang Online E number number number 题解
分析: 当n=1时ans=4=f(5)-1; n=2,ans=12=f(7)-1; n=3,ans=33=f(9)-1; 于是大胆猜想ans=f(2*k+3)-1. 之后用矩阵快速幂求解f(n)即可, ...
- C#异步的世界【上】(转)
新进阶的程序员可能对async.await用得比较多,却对之前的异步了解甚少.本人就是此类,因此打算回顾学习下异步的进化史. 本文主要是回顾async异步模式之前的异步,下篇文章再来重点分析async ...
- AtCoder Grand Contest 014
AtCoder Grand Contest 014 A - Cookie Exchanges 有三个人,分别有\(A,B,C\)块饼干,每次每个人都会把自己的饼干分成相等的两份然后给其他两个人.当其中 ...
- Go语言http包简易入门
说道go语言web编程,必不可少的会使用到net/http包.go语言将web开发需要使用到的很多内容都放在了标准库中——net/http. 如何写一个简单的web程序很容易.如下: package ...
- Regex 提取字符串中重复数据且格式化显示
方法:用 $下标 提取满足项的值 /** * 餐食信息格式转换 * @早餐,1@晚餐,2 => 早餐(1份):晚餐(2份) */ convertMealInfo = (mealInfo ...
- el-upload进度条无效,on-progress无效问题解决方案
事先声明,本人系.net后端老菜鸟,vue接触没有多长时间,如果存在技术分享错误,切莫见怪,第一次写博,还请大佬们多多担待,转载请注明出处谢谢! 最近项目用到饿了么上传,于是参照官网接入el-uplo ...