restframework 视图
重要知识点
as_view()获取的是view方法名,当url配版成功,执行view方法
一、逻辑封装(mixins, generics)
path('author/', views.AuthorView.as_view()),
path('author/<pk>/', views.AuthorDetailView.as_view()),
路由
from rest_framework import mixins, generics
"""
本质:封装逻辑
1.return 父类的方法
2.queryset serializer_class 两个参数必要(看源码)
3.mixins.ListModelMixin和mixins.CreateModelMixin 没有的方法到generics.GenericAPIView去找
4.url的参数要改成pk,根据get_obj() 源码
""" class AuthorView(mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericAPIView):
queryset = Author.objects.all()
# print(queryset)
serializer_class = AuthorModelSerializer 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 AuthorDetailView(mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin,
generics.GenericAPIView):
queryset = Author.objects.all()
serializer_class = AuthorModelSerializer def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs) def put(self, request, *args, **kwargs):
return self.update(request, *args, **kwargs) def delete(self, request, *args, **kwargs):
return self.destroy(request, *args, **kwargs)
视图
二、封装类(generics)
path('author/', views.AuthorView.as_view()),
path('author/<pk>/', views.AuthorDetailView.as_view()),
路由
from rest_framework import generics
"""
本质:对类进行封装(具体情况看源码)
1.只需要 queryset 和 serializer_class
2.generics.ListCreateAPIView -----> mixins.ListModelMixin, mixins.CreateModelMixin, GenericAPIView 和get post方法
3.generics.RetrieveUpdateDestroyAPIView -----> mixins.RetrieveModelMixin,mixins.UpdateModelMixin,mixins.DestroyModelMixin, GenericAPIView 和 get put patch 和delete
""" class AuthorView(generics.ListCreateAPIView):
queryset = Author.objects.all()
serializer_class = AuthorModelSerializer class AuthorDetailView(generics.RetrieveUpdateDestroyAPIView):
queryset = Author.objects.all()
serializer_class = AuthorModelSerializer
视图
三、一个视图CBV
有两个视图的原因:有两个get方法
path('author/', views.AuthorViewSet.as_view({'get': 'list', 'post': 'create'})),
path('author/<pk>/', views.AuthorViewSet.as_view({'get': 'retrieve', 'put': 'update', 'delete': 'destroy'})),
路由
from rest_framework import viewsets """
重点:有两个视图CBV的原因,有两个get方法
源码分析
1.查找as_view(),并传递参数 {'get': 'list', 'post': 'create'}
AuthorViewSet-->ModelViewSet-->GenericViewSet-->ViewSetMixin(找到as_view(传递参数action),返回值view, 找返回值)-->view()(找到view) for method, action in actions.items(): actions: {'get': 'list', 'post': 'create'}
handler = getattr(self, action) handler=self.list handler=self.create
setattr(self, method, handler) self.get=handler=self.list ->self.get=self.list 返回 dispatch() 2.查找 dispatch()
AuthorViewSet-->ModelViewSet-->GenericViewSet-->generics.GenericAPIView-->views.APIView
找到dispatch(self, request, *args, **kwargs) if request.method.lower() in self.http_method_names: get 在 方法里
handler = getattr(self, request.method.lower(), get既是list
self.http_method_not_allowed)
else:
handler = self.http_method_not_allowed get找到list解决了 有两个list的问题
""" class AuthorViewSet(viewsets.ModelViewSet):
queryset = Author.objects.all()
serializer_class = AuthorModelSerializer
视图
restframework 视图的更多相关文章
- restful知识点之二restframework视图
restful协议理解:面向资源开发 restful协议 ---- 一切皆是资源,操作只是请求方式 ----book表增删改查 /books/ books /books/add/ addbook /b ...
- Restframework 视图组件与序列号组件的应用.
models from django.db import models # Create your models here. class Course(models.Model): title=mod ...
- restframework 解析器、渲染器、url控制组件
一.解析器 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己可以处理的数据.本质就是对请求体中的数据进行解析. 1.分类 from rest_framework.parsers impo ...
- 关于djangorestframework
djangorestframework技术文档 restfrmework规范 开发模式 普通开发为前端和后端代码放在一起写 前后端分离为前后端交互统统为ajax进行交互 前后端分离 优点:分工明细,节 ...
- rest-framework之视图
rest-framework之视图 本文目录 一 基本视图 二 mixin类和generice类编写视图 三 使用generics 下ListCreateAPIView,RetrieveUpdateD ...
- S11 day 94 RestFramework 之 APIView视图
VIEW视图(Django自带的) 1. url url(r'login/$', views.login.as_view()), 2.点开 as_view() , as_view()为类方法. l ...
- day 94 RestFramework序列化组件与视图view
一 .复习 1. CBV流程 class BookView(View): def get(): pass def post(): pass #url(r'^books/', views.BookVie ...
- S11 day 95 RestFramework 之 视图
1. 基于APIVIEW视图序列化 我们会发现两个类有好多重复的代码.所以我们引入了GenericAPIView (继承了APIView) 2.Generic ApiVIew和 ListModel ...
- rest-framework框架——视图三部曲
一.mixins类编写视图 1.配置url urlpatterns = [ ... re_path(r'^authors/$', views.AuthorView.as_view(), name=&q ...
随机推荐
- ajaxSetup()方法
使用ajaxSetup()方法设置全局Ajax默认选项 使用ajaxSetup()方法可以设置Ajax请求的一些全局性选项值,设置完成后,后面的Ajax请求将不需要再添加这些选项值,它的调用格式为: ...
- 【35.53%】【POJ 2912】Rochambeau
Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 2837 Accepted: 1008 Description N childre ...
- dotnet 使用 MessagePack 序列化对象
和很多序列化库一样,可以通过 MessagePack 序列化和反序列化,和 json 相比这个库提供了二进制的序列化,序列化之后的内容长度比 json 小很多 这个库能序列的内容不多,大多数时候建议使 ...
- 【Jenkins】pipeline-hello-world项目
1.New Item 2.Pipeline Definition 3.Build Error 4.Solution 5.Console Output
- .NETCore3.1中的Json互操作最全解读-收藏级
前言 本文比较长,我建议大家先点赞.收藏后慢慢阅读,点赞再看,形成习惯! 我很高兴,.NETCore终于来到了3.1LTS版本,并且将支持3年,我们也准备让部分业务迁移到3.1上面,不过很快我们就遇到 ...
- 洛谷p1345---最小割的奇妙运用
让你去掉最少的点,使得c1和c2变得不连通,你有办法吗??? 这是最小割呀!!! 网络流的最小割去掉的是边,构造边的顶点的唯一关系就好了!!! 需要注意一点 #include<iostream& ...
- Linux中 ps命令的参数讲解
Linux命令ps: (Process Status的缩写)该命令常常用来用来列出系统中当前运行的进程.ps是显示瞬间进程的状态,并不动态连续:如果想对进程进行实时监控应该用top命令 -a 显示所有 ...
- $vjudge-$基本算法专题题解
考完期末又双叒回来刷普及题辣$kk$ 然后放个链接趴还是$QwQ$ [X]$A$ 因为是嘤文($bushi$所以放个题意趴$QwQ$ 就汉诺塔问题,只是说有四个塔$A,B,C,D$,要求输出有1-12 ...
- 洛谷$P$2522 $Problem\ b\ [HAOI2011]$ 莫比乌斯反演
正解:莫比乌斯反演 解题报告: 传送门! 首先看到这个显然就想到莫比乌斯反演$QwQ$? 就先瞎搞下呗$QwQ$ $gcd(x,y)=k$,即$gcd(\left \lfloor \frac{x}{k ...
- Go网络文件传输
流程分析 借助TCP完成文件的传输,基本思路如下: 发送方(客户端)向服务端发送文件名,服务端保存该文件名. 接收方(服务端)向客户端返回一个消息ok,确认文件名保存成功. 发送方(客户端)收到消息后 ...