重要知识点

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. 【u201】矩形覆盖

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 有N个矩形,矩形的底边边长为1,且均在X轴上,高度给出,第i个矩形的高为h[i],例如h = [3, ...

  2. vue-learning:39 - router - vue-router的基本使用

    vue-router路由的基本使用 一张图阐述vue-router的基本使用步骤 // 0. 如果全局使用CDN引入:vue 引入在前,vue-router引入在后 // <script src ...

  3. [数论] hdu 5974 A Simple Math Problem (数论gcd)

    传送门 •题意 一直整数$a,b$,有 $\left\{\begin{matrix}x+y=a\\ LCM(x*y)=b \end{matrix}\right.$ 求$x,y$ •思路 解题重点:若$ ...

  4. vue-learning:11 -js-nextTick()

    nextTick() 在jQuery中,如果我们要生成一个ul-li的列表元素,我们也不会在循环体中每生成一个li就将它插入到ul中,而是在循环体内拼接每个li,待循环体结束后,再一并添加到ul元素上 ...

  5. Curator实现zookeeper分布式锁的基本原理

    一.写在前面 之前写过一篇文章(<拜托,面试请不要再问我Redis分布式锁的实现原理>),给大家说了一下Redisson这个开源框架是如何实现Redis分布式锁原理的,这篇文章再给大家聊一 ...

  6. k8s集群———etcd-三节点部署

    etcd集群部署 ,创建etcd可执行文件,配置文件,证书文件存放目录 mkdir /opt/etcd/{bin,cfg,ssl} -p ,创建包文件存放目录 mkdir /soft -p ,解压et ...

  7. Ubuntu 18.04安装搜狗拼音

    首先安装fcitx 一.检测是否安装fcitx 首先检测是否有fcitx,因为搜狗拼音依赖fcitx > fcitx 提示: 程序“fcitx”尚未安装. 您可以使用以下命令安装: > s ...

  8. 公子奇带你一步一步了解Java8中Lambda表达式

    在上一篇<公子奇带你一步一步了解Java8中行为参数化>中,我们演示到最后将匿名实现简写为 (Police police) -> "浙江".equals(poli ...

  9. FRPC 双向socket通讯 转发请求类轮子

    一直在找一个能双向通讯的C#库 学识浅薄没有找到 于是封装一个预计BUG奇多的轮子 他是基于SuperSocket开发的 这样的 它跟传统的 架构不一样 它的最小架构 或者 客户端即是服务端 比如一个 ...

  10. .NetCoreApi容器与MySql容器互联

    构建Mysql容器 1.拉取mysql镜像 docker pull mysql/mysql-server 2.创建mysql镜像 docker run -d -p 3306:3306 -e MYSQL ...