重要知识点

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 视图的更多相关文章

  1. restful知识点之二restframework视图

    restful协议理解:面向资源开发 restful协议 ---- 一切皆是资源,操作只是请求方式 ----book表增删改查 /books/ books /books/add/ addbook /b ...

  2. Restframework 视图组件与序列号组件的应用.

    models from django.db import models # Create your models here. class Course(models.Model): title=mod ...

  3. restframework 解析器、渲染器、url控制组件

    一.解析器 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己可以处理的数据.本质就是对请求体中的数据进行解析. 1.分类 from rest_framework.parsers impo ...

  4. 关于djangorestframework

    djangorestframework技术文档 restfrmework规范 开发模式 普通开发为前端和后端代码放在一起写 前后端分离为前后端交互统统为ajax进行交互 前后端分离 优点:分工明细,节 ...

  5. rest-framework之视图

    rest-framework之视图 本文目录 一 基本视图 二 mixin类和generice类编写视图 三 使用generics 下ListCreateAPIView,RetrieveUpdateD ...

  6. S11 day 94 RestFramework 之 APIView视图

    VIEW视图(Django自带的) 1.  url url(r'login/$', views.login.as_view()), 2.点开 as_view() , as_view()为类方法.  l ...

  7. day 94 RestFramework序列化组件与视图view

    一 .复习 1. CBV流程 class BookView(View): def get(): pass def post(): pass #url(r'^books/', views.BookVie ...

  8. S11 day 95 RestFramework 之 视图

    1. 基于APIVIEW视图序列化   我们会发现两个类有好多重复的代码.所以我们引入了GenericAPIView (继承了APIView) 2.Generic ApiVIew和 ListModel ...

  9. rest-framework框架——视图三部曲

    一.mixins类编写视图 1.配置url urlpatterns = [ ... re_path(r'^authors/$', views.AuthorView.as_view(), name=&q ...

随机推荐

  1. linux 从用户空间的 I/O 存取

    刚刚描述的这些函数主要打算被设备驱动使用, 但它们也可从用户空间使用, 至少在 PC- 类 的计算机. GNU C 库在 <sys/io.h> 中定义它们. 下列条件应当应用来对于 inb ...

  2. C# 标准性能测试高级用法

    本文告诉大家如何在项目使用性能测试测试自己写的方法 在 C# 标准性能测试 已经告诉大家如何使用 BenchmarkDotNet 测试性能,本文会告诉大家高级的用法. 建议是创建一个控制台项目用来做性 ...

  3. hdp3.1 hive 3.0的使用记录

    近来在做项目中的技术调研,使用最新版的hdp3.1,其中使用spark2.3和hive 3.1. 遇到 一些问题,记录如下: 一,使用spark-sql client driver去访问hive创建的 ...

  4. Asp.net全局资源文件( App_GlobalResources)和本地资源文件(App_LocalResources)

    今天项目中需要加入对不同语言的支持. 找了半天的资料,关于GlobalResources和LocalResource都说的模棱两可的. 只能自己边找资料边试.     全局资源文件 样例(Demo中有 ...

  5. HBase01

    https://blog.csdn.net/weixin_42641909/article/details/89428976 1. HBase Shell操作连接集群hbase shell 2. 创建 ...

  6. mybatis 的 dao 接口跟 xml 文件里面的 sql 是如何建立关系的?一步步解析

    序言 在开始正文之前,首先解释Dao接口和XML文件里的SQL是如何一一对应的? 一句话讲完就是:mybatis 会先解析这些xml 文件,通过 xml 文件里面的命名空间 (namespace)跟d ...

  7. eclipse中如何配置jdk

    1.在eclipse的上方打开Windows这个选项,选择Preferences==>Java==>Installed JREs 2.然后选择Add==>Standard VM==& ...

  8. BeetleX之XRPC使用详解

    XRPC是基于BeetleX扩展一个远程接口调用组件,它提供基于接口的方式来实现远程服务调用,在应用上非常简便.组件提供.NETCore2.1和.NETStandard2.0的client版本,因此即 ...

  9. 「洛谷P1080」「NOIP2012提高组」国王游戏 解题报告

    P1080 国王游戏 题目描述 恰逢 \(H\)国国庆,国王邀请\(n\)位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 \( ...

  10. kafka sasl/plain安全认证

    1.SASL认证机制版本支持 SASL/GSSAPI (Kerberos) - starting at version 0.9.0.0SASL/PLAIN - starting at version ...