03_Tutorial 3: Class-based Views 基于类的视图(CBV)
1、CBV
0、文档
https://q1mi.github.io/Django-REST-framework-documentation/tutorial/3-class-based-views_zh/
https://www.django-rest-framework.org/tutorial/3-class-based-views/
1、方式1:APIView
# 方式1:APIView 使用基于类的视图重写我们的API
# 使用基于类视图的最大优势之一是它可以轻松地创建可复用的行为
from rest_framework.views import APIView
from django.http import Http404 class SnippetList31(APIView):
"""
列出所有的snippets或者创建一个新的snippet。
"""
def get(self, request, format=None):
snippets = Snippet.objects.all()
serializer = SnippetSerializer(snippets, many=True) # 序列化多个,many=True
return Response(serializer.data) def post(self, request, format=None):
serializer = SnippetSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) class SnippetDetail31(APIView):
"""
检索,更新或删除一个snippet示例。
"""
def get_object(self, pk): # 封装
"""queryset实例对象"""
try:
return Snippet.objects.get(pk=pk)
except Snippet.DoesNotExist:
raise Http404 def get(self, request, pk ,format=None):
snippet = self.get_object(pk)
serializer = SnippetSerializer(snippet)
return Response(serializer.data, status=status.HTTP_200_OK) def put(self, request, pk, format=None):
snippet = self.get_object(pk)
serializer = SnippetSerializer(snippet, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) def delete(self, request, pk, format=None):
snippet = self.get_object(pk)
snippet.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
2、方式2:使用混合(mixins)
1、mixin类 和 GenericAPIView类
mixin类提供.list()和.create()操作
GenericAPIView类来提供核心功能, 继承APIView
2、get_queryset()`/`get_serializer_class()
queryset = None
serializer_class = None
# 方式2:使用混合(mixins)
from rest_framework import mixins
from rest_framework import generics class SnippetList32(mixins.ListModelMixin, # mixin类提供.list()和.create()操作
mixins.CreateModelMixin,
generics.GenericAPIView): # GenericAPIView类来提供核心功能, 继承APIView # GenericAPIView中,重写view视图需要
# 用`get_queryset()`/`get_serializer_class()`替代queryset
# 一次获取queryset,结果会被缓存,可以多次使用
# queryset = None
# serializer_class = None
queryset = Snippet.objects.all() # queryset实例对象
serializer_class = SnippetSerializer # 序列化器 def get(self, request, *args, **kwargs): # get绑定到list()
return self.list(request, *args, **kwargs) def post(self, request, *args, **kwargs): # post绑定到create()
return self.create(request, *args, **kwargs) class SnippetDetail32(mixins.RetrieveModelMixin, # Retrieve 检索某个
mixins.UpdateModelMixin, # update 更新某个
mixins.DestroyModelMixin, # destroy 删除某个
generics.GenericAPIView): queryset = Snippet.objects.all()
serializer_class = SnippetSerializer 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)
3、方式3:使用通用的基于类的视图:generics
1、get、post
class SnippetList(generics.ListCreateAPIView)
2、单个的增删改查
class SnippetDetail(generics.RetrieveUpdateDestroyAPIView)
from rest_framework import generics class SnippetList(generics.ListCreateAPIView): # list create
queryset = Snippet.objects.all()
serializer_class = SnippetSerializer class SnippetDetail(generics.RetrieveUpdateDestroyAPIView): # 检索,更新,删除
queryset = Snippet.objects.all()
serializer_class = SnippetSerializer
03_Tutorial 3: Class-based Views 基于类的视图(CBV)的更多相关文章
- Django 基于类的视图(CBV)执行流程 CBV 源码分析
一.CBV(基于类的视图) 视图是可以调用的,它接受请求并返回响应,这不仅仅是一个函数,Django提供了一些可以用作视图的类的例子,这些允许您通过继承或mixin来构建视图并重用代码. 基本示例 D ...
- django 中基于类的视图
django 视图 分为两种: 1. FBV 基于函数的视图 function based view 2. CBV 基于类的视图 class based ...
- Django笔记&教程 7-1 基于类的视图(Class-based views)介绍
Django 自学笔记兼学习教程第7章第1节--基于类的视图(Class-based views)介绍 点击查看教程总目录 1 介绍 Class-based views (CBVs) are view ...
- django-rest-framework之基于类的视图
前言:上一篇博客中,主要讲的是请求和响应,项目里面views.py中的视图函数都是基于函数的,并且我们介绍了@api_view这个很有用的装饰器.同时,我们还介绍了APIView这个类,但是还没使用它 ...
- Django编写RESTful API(三):基于类的视图
欢迎访问我的个人网站:www.comingnext.cn 前言 在上一篇文章中,主要讲的是请求和响应,项目里面views.py中的视图函数都是基于函数的,并且我们介绍了@api_view这个很有用的装 ...
- Django REST FrameWork中文教程3:基于类的视图
我们也可以使用基于类的视图编写我们的API视图,而不是基于函数的视图.我们将看到这是一个强大的模式,允许我们重用常用功能,并帮助我们保持代码DRY. 使用基于类的视图重写我们的API 我们将首先将根视 ...
- 介绍——基于类的视图(class-based view)
刚开始的时候,django只有基于函数的视图(Function-based views).为了解决开发视图中繁杂的重复代码,基于函数的通用视图( Class-based generic views) ...
- Django——基于类的视图源码分析 一
基于类的视图(Class-based view)是Django 1.3引入的新的视图编写方式,用于取代以前基于函数(Function-based)方式. 借助于OO和Python中方便的多重继承特性, ...
- Django——基于类的视图(class-based view)
刚开始的时候,django只有基于函数的视图(Function-based views).为了解决开发视图中繁杂的重复代码,基于函数的通用视图( Funcation-based generic vie ...
随机推荐
- Javascript 闭包何时回收?
定义 闭包是函数和声明该函数的词法环境的组合.闭包是指有权访问另一个函数作用域中的变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量. 范例 fun ...
- hadoop常见问题收集
hadoop 搭建 常用命令记录 快捷键安装在/user/local/bin目录下 nano 文件名 ctrl + k 剪切一行 ctrl + o 保存并重命名,不重命名直接enter ctrl + ...
- Appscan 的安装与使用
一.安装 1.右键安装文件,以管理员身份运行,如下图所示: 2.点击[确定] 3.点击[安装] 4.选择:我接受许可协议中单位全部条款,点击[下一步] 5.点击[安装]到该目录 6.如果需求扫描Web ...
- 通用32位CPU 常用寄存器及其作用
目录 32位CPU所含有的寄存器 数据寄存器 变址寄存器 指针寄存器 段寄存器 指令指针寄存器 标志寄存器 32位CPU所含有的寄存器 4个数据寄存器(EAX.EBX.ECX和EDX) 2个变址和指针 ...
- python检测当前端口是否使用
基于python检测端口是否在使用 - 缘起花渊 - 博客园https://www.cnblogs.com/yqmcu/p/9804002.html def net_is_used(port,ip=' ...
- PB笔记之数据窗体分组合计列
- 单选按钮(CheckBox)
import React, { useState, useEffect } from 'react' import PropTypes from 'prop-types' import _ from ...
- nginx buffer
1.错误日志:warn:an upstream response is buffered to a temporary file 解决办法:增加fastcgi_buffers 8 4K; fa ...
- Mybatis:缓存
1.什么是缓存[Cache] 存在内存中的临时数据. 将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统 ...
- 0-1背包问题——回溯法求解【Python】
回溯法求解0-1背包问题: 问题:背包大小 w,物品个数 n,每个物品的重量与价值分别对应 w[i] 与 v[i],求放入背包中物品的总价值最大. 回溯法核心:能进则进,进不了则换,换不了则退.(按照 ...