一. 概念
FBV(function base views) 顾名思义基于函数的视图类

CBV(class base views)基于类的视图类

至于区别呢? 我觉得只是写法上的不一样, 实现的结果都是一样的, 我比较喜欢用CBV模式, 因为在Django中内部帮我做了请求方式的判断, 无需用户实现方法判断逻辑, 来看看代码的区别吧

二. 实现代码
1.FBV 
fbv就是在url中一个路径对应一个函数. 在工程下的url中写如下代码

from api import viewsurlpatterns = [path('admin/', admin.site.urls),path('', include('api.urls')),url(r'^test/', views.test_fbv)
]

然后在api的views中写如下测试函数:

def test_fbv(request):if(request.method == 'POST'):return HttpResponse("post")if (request.method == 'PUT'):return HttpResponse("put")if (request.method == 'GET'):return HttpResponse("get")

然后运行整个整个工程, 命令行输入python manage.py runserver

因为我的是linux系统, 就选用restclient这个插件进行api的测试

点完send后再看看 返回什么数据, 在response中可以 看到get

可以看到和我们想象的结果一样, 那我们在试试其他的请求方式, 比如put, post等 和我们代码写的一样, 这里我就不截图了

基于方法的视图

REST framework 也允许使用基于函数的视图。它提供了一套简单的装饰器来包装你的函数视图,以确保它们接收 Request(而不是 Django HttpRequest)实例并允许它们返回 Response(而不是 Django HttpResponse),并允许你配置该请求的处理方式。

@api_view()

用法:@api_view(http_method_names=['GET'])

api_view 是一个装饰器,用 http_method_names 来设置视图允许响应的 HTTP 方法列表,举个例子,编写一个简单的视图,手动返回一些数据。

from rest_framework.decorators import api_view@api_view()
def hello_world(request):return Response({"message": "Hello, world!"})

默认情况下,只有 GET 方法会被接受。其他方法将以 "405 Method Not Allowed" 进行响应。要使用其他方法,请指定视图允许的方法,如下所示:

@api_view(['GET', 'POST'])
def hello_world(request):if request.method == 'POST':return Response({"message": "Got some data!", "data": request.data})return Response({"message": "Hello, world!"})

API 策略装饰器 (policy decorators)

为了覆盖默认设置,REST framework 提供了一系列可以添加到视图中的附加装饰器。这些必须在 @api_view 装饰器之后(下方)。

例如,要创建一个使用 throttle 来确保它每天只能由特定用户调用一次的视图,请使用 @throttle_classes 装饰器,传递一个 throttle 类列表:

from rest_framework.decorators import api_view, throttle_classes
from rest_framework.throttling import UserRateThrottleclass OncePerDayUserThrottle(UserRateThrottle):rate = '1/day'@api_view(['GET'])
@throttle_classes([OncePerDayUserThrottle])
def view(request):return Response({"message": "Hello for today! See you tomorrow!"})

这些装饰器对应于 APIView上设置的策略属性。

可用的装饰器有:

@renderer_classes(...)

@parser_classes(...)

@authentication_classes(...)

@throttle_classes(...)

@permission_classes(...)

每个装饰器都有一个参数,它必须是一个类列表或者一个类元组。

2. CBV
CBV就是在url中一个路径对应一个类

在上述工程下的urls下添加如下代码


urlpatterns = [path('admin/', admin.site.urls),path('', include('api.urls')),url(r'^test_FBV/', views.test_FBV),url(r'^test_CBV/', views.test_CBV.as_view())
]

注意当用cbv模式写url时类后面一定要用as_view()方法, 这是规定格式

然后在api下的views文件中写如以下逻辑代码

from django.views import Viewclass test_CBV(View):# 以get形式访问会执行get函数,一般情况下获取数据def get(self, *args, **kwargs):return HttpResponse('get')# 以post形式访问的话会执行post函数,一般情况下发送数据def post(self, *args, **kwargs):return HttpResponse('post')

这里做几点说明:

1.cbv模式下的视图类一定要继承Views类

2. 然后重定向get, post, put请求方法等, 实现不同的请求方法实现不同的逻辑代码, api验证这部分我就不说了, 直接用restclient测试就可以了

FBV(function base views) 顾名思义基于函数的视图类 CBV(class base views)基于类的视图类相关推荐

  1. ABAP 快速找到第二代增强的方法(基于函数出口增强function)

    SAP系统带有增强出口检查函数如下: MODX_ALL_ACTIVE_MENUENTRIES (菜单增强) MODX_FUNCTION_ACTIVE_CHECK (出口函数增强) MODX_MENUE ...

  2. 客户端序列码生成_Django REST Framework教程(2): 序列化器介绍及开发基于函数视图的API...

    在上篇文章中,我们已经介绍了为什么要学习DRF,什么是序列化以及什么是符合RESTful规范的Web API.在本篇文章中我们将以博客为例,使用DRF提供的序列化器(Serializers类)开发两个 ...

  3. 基于ubuntu-20.04.3的snort+Barnyard2+BASE的入侵检测系统安装时Barnyard2反编译时出错解决

    基于ubuntu-20.04.3的snort+Barnyard2+BASE的入侵检测系统安装时Barnyard2反编译时出错解决 在按照https://www.modb.pro/db/159797大佬 ...

  4. 基于函数计算的 BFF 架构

    什么是 BFF BFF 全称是 Backends For Frontends (服务于前端的后端),起源于 2015 年 Sam Newman 一篇博客文章<Pattern: Backends ...

  5. 一元建站-基于函数计算 wordpress 构建 serverless 网站

    前言 本文旨在通过 快速部署一个 wordpress 网站到阿里云函数计算平台 这个示例来展示 serverless web 新的开发模式, 包括 FUN 工具一键初始化 NAS, 同步网站到 NAS ...

  6. 基于函数计算的 Serverless AI 推理

    前言概述 本文介绍了使用函数计算部署深度学习 AI 推理的最佳实践, 其中包括使用 FUN 工具一键部署安装第三方依赖.一键部署.本地调试以及压测评估, 全方位展现函数计算的开发敏捷特性.自动弹性伸缩 ...

  7. base | 使用apply族函数进行向量化运算

    R基础包base的apply族函数采用向量化运算实现批量计算,相较于for循环语句其代码更加简洁.运行速度也更快,恰当地运用这些函数能够极大提高代码质量.本篇主要介绍apply族函数的apply(), ...

  8. 基于函数工作流的函数组合

    基于函数工作流的函数组合 函数工作流(Function Flow,简称 FnF)是一个用来协调多个分布式任务执行的全托管 Serverless 云服务,简化了开发和运行业务流程所需要的任务协调.状态管 ...

  9. 云起实验室:基于函数计算实现AI推理

    本场景基于函数计算建立一个TensorFlow Serverless AI推理平台. 点击立即参与云产品场景体验https://developer.aliyun.com/adc/scenario/35 ...

最新文章

  1. SpringBoot + Redis 解决海量重复提交问题
  2. 实现接口一种可靠的 DLL 接口实现方案
  3. VTK:演示在多边形数据上使用裁剪用法实战
  4. Java中把JSON和List结果集互转的代码片段整理
  5. eclipse(或者myeclipse)常用配置方法
  6. 在观念上进行大的转变
  7. 千兆网综合布线系统的线缆选型
  8. laydate 时间控件去掉秒以及解决在移动端不能滑动的问题
  9. 【数据结构与算法】数据结构与算法最基础理论
  10. 华为正式开源数据虚拟化引擎 openLooKeng
  11. 【C语言】井字棋游戏
  12. 十二进制转十进制(n进制转十进制也一样)
  13. 前端,网页设计常用色彩搭配表
  14. Python:用海龟作图turtle画一个小丑
  15. 前端理解base64
  16. java 圆类 圆锥类_喉室位于_java程序设计答案_学小易找答案
  17. 李笑来《韭菜的自我修养》笔记
  18. 常用眼底图像数据集简介及下载--糖尿病视网膜病变 EyePacs,APTOS2019,STARE数据集
  19. 基于深度学习lstm_深度学习和基于LSTM的恶意软件分类
  20. 微信小程序--自定义组件之搜索框

热门文章

  1. AGC008D K-th K
  2. 正睿2019省选附加赛 Day10 (这篇其实已经都咕咕了...)
  3. 前端布局神器display:flex
  4. 七种常见的核酸序列蛋白编码能力预测工具 | ncRNAs | lncRNA
  5. bzoj3156 防御准备 - 斜率优化
  6. 【bzoj2132】圈地计划 网络流最小割
  7. inet_pton函数和inet_ntop函数的用法及简单实现
  8. java版开源工作流引擎ccflow从表数据数据源导入设置
  9. 解决 Script Error 的另类思路
  10. 微软超过苹果 成为全球第一大市值公司