django设计模式理解FBV和CBV

在 Web 开发中,FBV(Function-Based Views)和 CBV(Class-Based Views)是两种常见的视图设计模式,用于处理 HTTP 请求并生成相应的响应。下面是它们的简要解释:

Function-Based Views (FBV)

在 Function-Based Views 中,每个视图都是一个简单的 Python 函数,该函数接收一个 HTTP 请求作为参数,并返回一个 HTTP 响应。开发者可以直接编写函数来处理请求逻辑,包括数据处理、业务逻辑和生成响应等。

优点:
  • 相对简单,易于理解和编写。
  • 灵活性高,可以直接使用 Python 函数的各种特性。
缺点:
  • 可能导致视图函数变得庞大,难以维护。
  • 不够结构化,难以复用和扩展。

Class-Based Views (CBV)

在 Class-Based Views 中,视图是基于类的,每个视图对应于一个类。这些类提供了一些内置的方法来处理不同的 HTTP 请求方法(如 GET、POST 等),开发者可以通过继承和重写这些方法来实现视图的功能。

优点:
  • 结构化清晰,代码复用性高。
  • 可以利用类的继承和方法重写来实现通用功能,减少重复代码。
缺点:
  • 学习曲线较陡,相对复杂。
  • 可能需要更多的代码量来实现相同的功能。

如何选择:

  • 如果项目简单且功能不复杂,可以选择使用 FBV,快速开发。
  • 如果项目较大且功能复杂,推荐使用 CBV,可以更好地组织代码和实现复杂功能。

在 Django 和 Flask 等 Web 框架中,都支持这两种视图设计模式,开发者可以根据项目需求和个人偏好选择合适的视图方式来实现功能。

代码实例

urls.py中:
urlpatterns = [path('user_auth/', views.user_auth),  # FBVpath('user/', views.UserView.as_view()),  # CBVpath('info/', views.InfoView.as_view()),  # rest-framework CBV和CBV在这里是一样的
]views中:
from django.views import View#FBV
def user_auth(request):if request.method == "GET":return JsonResponse({"code":200,"message":"GET"})if request.method == "POST":return JsonResponse({"code":200,"message":"POST"})if request.method == "PUT":return JsonResponse({"code":200,"message":"PUT"})if request.method == "DELETE":return JsonResponse({"code":200,"message":"DELETE"})#CBV
class UserView(View):def get(self,request):return JsonResponse({"code": 200, "message": "GET"})def post(self,request):return JsonResponse({"code": 200, "message": "POST"})def delete(self,request):return JsonResponse({"code": 200, "message": "DELETE"})def put(self,request):return JsonResponse({"code": 200, "message": "PUT"})# django rest-framework CBV
class InfoView(APIView):def get(self, request):return Response({"code:200", "message:GET"})def post(self, request):return JsonResponse({"code": 200, "message": "POST"})def delete(self, request):return JsonResponse({"code": 200, "message": "DELETE"})def put(self, request):return JsonResponse({"code": 200, "message": "PUT"})

我们实际开发中推荐使用的是CBV,因为即使项目比较小,总会有做大的时候,相信自己有一天可以开发复杂的难度大的项目(手动狗头!)。CBV的书写方式结构也更加清晰,当然也要了解FBV的模式。

效果

上述代码的效果,访问网站看下:
FBV
在这里插入图片描述
CBV
在这里插入图片描述
django rest-framework CBV

在这里插入图片描述
其实就是界面上的区别,django rest-framework更加好看好一些。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/320213.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

激发创新活力,泸州老窖锻造人才“铁军”(内附长江酒道短评)

执笔 | 姜 姜 编辑 | 古利特 刚刚站上300亿元新台阶&#xff0c;泸州老窖再次传来喜讯。 <<<左右滑动查看更多>>> 4月28日&#xff0c;四川省庆祝“五一”国际劳动节大会在成都召开。泸州老窖股份有限公司工业4.0项目秘书长赵丙坤、泸州老窖酿酒有限责任公…

VS Code 远程连接 SSH 服务器

文章目录 一、安装 Remote - SSH 扩展并连接远程主机二、免密连接远程主机1. 生成 SSH 密钥对2. 将公钥复制到远程服务器3. 配置 SSH 客服端4. 连接测试 随着技术的不断迭代更新&#xff0c;在 Linux 系统中使用 Vim、nano 等基于 Shell 终端的编辑器&#xff08;我曾经也是个 …

利用AI大模型和Echarts 绘制知识图谱,实现文本信息提取和图数据库操作

引言 随着信息时代的到来&#xff0c;海量的文本数据成为了我们获取知识的重要来源。然而&#xff0c;如何从这些文本数据中提取出有用的信息&#xff0c;并将其以可视化的方式展示出来&#xff0c;一直是一个具有挑战性的问题。近年来&#xff0c;随着人工智能技术的发展&…

热敏电阻符号与常见术语详细解析

热敏电阻是一种电阻器&#xff0c;其特点是电阻值随温度的变化而显著变化&#xff0c;这使得它们成为非常有用的温度传感器。它们可以由单晶、多晶或玻璃、塑料等半导体材料制成&#xff0c;并分为两大类&#xff1a;正温度系数热敏电阻&#xff08;#PTC热敏电阻#&#xff09;和…

纯血鸿蒙APP实战开发——短视频切换实现案例

短视频切换实现案例 介绍 短视频切换在应用开发中是一种常见场景&#xff0c;上下滑动可以切换视频&#xff0c;十分方便。本模块基于Swiper组件和Video组件实现短视频切换功能。 效果图预览 使用说明 上下滑动可以切换视频。点击屏幕暂停视频&#xff0c;再次点击继续播放…

场外个股期权和场内个股期权的优缺点是什么?

场外个股期权和场内个股期权的优缺点 场外个股期权是指在沪深交易所之外交易的个股期权&#xff0c;其本质是一种金融衍生品&#xff0c;允许投资者在股票交易场所外以特定价格买进或卖出证券。场内个股期权是以单只股票作为标的资产的期权合约&#xff0c;其内在价值是基于标…

深度学习-线性回归+基础优化算法

目录 线性模型衡量预估质量训练数据参数学习训练损失最小化损失来学习参数显式解 总结基础优化梯度下降选择学习率 小批量随机梯度下降选择批量大小 总结线性回归的从零开始实现实现一个函数读取小批量效果展示这里可视化看一下 线性回归从零开始实现线性回归的简洁实现效果展示…

HCIP第二节

OSPF&#xff1a;开放式最短路径协议&#xff08;属于IGP-内部网关路由协议&#xff09; 优点&#xff1a;相比与静态可以实时收敛 更新方式&#xff1a;触发更新&#xff1a;224.0.0.5/6 周期更新&#xff1a;30min 在华为设备欸中&#xff0c;默认ospf优先级是10&#…

vue3+vite+js 实现移动端,PC端响应式布局

目前使用的是vue3vite&#xff0c;没有使用ts 纯移动端|PC端 这种适用于只适用一个端的情况 方法&#xff1a;amfe-flexible postcss-pxtorem相结合 ① 执行以下两个命令 npm i -S amfe-flexible npm install postcss-pxtorem --save-dev② main.js文件引用 import amfe-f…

使用固定公网地址远程访问开源服务器运维管理面板1Panel管理界面

文章目录 前言1. Linux 安装1Panel2. 安装cpolar内网穿透3. 配置1Panel公网访问地址4. 公网远程访问1Panel管理界面5. 固定1Panel公网地址 前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器&#xff0c;包括主机监控、…

【前端】输入时字符跳动动画实现

输入时字符跳动动画实现 在前端开发中&#xff0c;为了提升用户体验&#xff0c;我们经常需要为用户的交互行为提供即时的反馈。这不仅让用户知道他们的操作有了响应&#xff0c;还可以让整个界面看起来更加生动、有趣。本文将通过一个简单的例子讲解如何实现在用户输入字符时…

更适合宝妈和上班族的兼职,每天2小时收入250+的微头条项目

许多人通过撰写微头条赚取收入&#xff0c;但这通常需要自己寻找素材&#xff0c;然后逐字逐句地进行改编创作&#xff0c;整个过程既繁琐又低效。 然而&#xff0c;如今全球范围内的AI工具正如雨后春笋般涌现。百度推出了文心一言&#xff0c;阿里巴巴推出了AI工具通义千问&a…

Stateflow基础知识笔记

01--Simulink/Stateflow概述 Stateflow是集成于Simulink中的图形化设计与开发工具&#xff0c;主要 用于针对控制系统中的复杂控制逻辑进行建模与仿真&#xff0c;或者说&#xff0c; Stateflow适用于针对事件响应系统进行建模与仿真。 Stateflow必须与Simulink联合使用&#…

20240503解决Ubuntu20.04和WIN10双系统下WIN10的时间异常的问题

20240503解决Ubuntu20.04和WIN10双系统下WIN10的时间异常的问题 2024/5/3 9:33 缘起&#xff1a;因为工作需要&#xff0c;编译服务器上都会安装Ubuntu20.04。 但是因为WINDOWS强悍的生态系统&#xff0c;偶尔还是有必须要用WINDOWS的时候&#xff0c;于是也安装了WIN10。 双系…

LNMP部署wordpress

1.环境准备 总体架构介绍 序号类型名称外网地址内网地址软件02负载均衡服务器lb0110.0.0.5192.168.88.5nginx keepalived03负载均衡服务器lb0210.0.0.6192.168.88.6nginx keepalived04web服务器web0110.0.0.7192.168.88.7nginx05web服务器web0210.0.0.8192.168.88.8nginx06we…

Flask应用的部署和使用,以照片分割为例。

任务是本地上传一张照片&#xff0c;在服务器端处理后&#xff0c;下载到本地。 服务器端已经封装好了相关的程序通过以下语句调用 from amg_test import main from test import test main() test() 首先要在虚拟环境中安装flask pip install Flask 文件组织架构 your_pro…

BERT模型的网络结构解析 运行案例分析

整体结构 第一部分&#xff1a;嵌入层第二部分&#xff1a;编码层第三部分&#xff1a;输出层 对于一个m分类任务&#xff0c;输入n个词作为一次数据&#xff0c;单个批次输入t个数据&#xff0c;在BERT模型的不同部分&#xff0c;数据的形状信息如下&#xff1a; 注1&#x…

【保姆级讲解如何安装与配置Xcode】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

SpringBoot 打包所有依赖

SpringBoot 项目打包的时候可以通过插件 spring-boot-maven-plugin 来 repackage 项目&#xff0c;使得打的包中包含所有依赖&#xff0c;可以直接运行。例如&#xff1a; <plugins><plugin><groupId>org.springframework.boot</groupId><artifact…

强强联手!沃飞长空携手中信海直,开启空中交通新篇章

自古以来&#xff0c;人类就对天空充满了向往。而新一代航空革命性飞行器eVTOL的出现&#xff0c;让我们离智慧低空出行场景更进一步。目前&#xff0c;中国、美国、欧洲等国家和地区都在加紧布局低空经济产业&#xff0c;整个市场可谓是百家争鸣。随着国内外相关研发企业的不断…