django设计模式理解FBV和CBV

news/2024/9/23 1:06:45/

在 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()),  # 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"})

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


http://www.ppmy.cn/news/1444885.html

相关文章

关键技术自主可控,中国移动发布大云磐石DPU芯片,速率达400Gbps

4月28日,中国移动在2024算力网络大会上正式发布大云磐石DPU,该芯片带宽达到400Gbps,为国内领先水平,将应用于移动云新一代大云磐石DPU产品,实现关键技术自主可控。 据介绍,DPU是一种专注于数据处理的处理器…

[机器学习系列]深入解析K-Means聚类算法:理论、实践与优化

目录 一、KMeans (一)Kmeans简介 (二)Kmeans作用和优点 (三)Kmeans局限和缺点 (四)Kmeans步骤 (五)如何选取最佳的K值的三种方法 (六)手肘法和目标函数的变化两种确定K值方法的区别 (七)如何选取第一次迭代的K个类中心------KMeans方法 (八)KMeans的常用参数介绍 二、…

Shell脚本入门:编写自动化任务的利器

一、Shell概述 Shell最早产生于20世纪70年代早期的Unix操作系统中。作为一种命令解释器,它位于操作系统的最外层,负责直接与用户进行交互。Shell把用户的输入解释给操作系统,并处理操作系统的输出结果,然后将其反馈给用户。这种交…

Ajax 解决浏览器缓存问题原理和例子

Ajax(Asynchronous JavaScript and XML)是一种用于创建交互式网页应用的网页开发技术。在使用Ajax进行请求时,有时可能会遇到浏览器缓存问题。浏览器默认会对一些请求进行缓存,以便在下次请求相同的资源时能够更快地加载。然而&am…

前端如何将接口传来的列表数据(数组)直接下载成csv文件

前言:最近遇到一个需求,需要实现一个下载表格数据的操作,一般来说是前端请求后端的下载接口,将文件流下载下来,但是因为这个项目任务时间比较紧,后端没时间做下载接口,所以暂时由前端直接调列表…

智能物联网时代:Web3连接智能设备的未来

随着科技的飞速发展,物联网(IoT)已经成为了现代生活中不可或缺的一部分。从智能家居到智能城市,物联网技术正在改变我们的生活方式和工作方式。而Web3作为下一代互联网的重要组成部分,将为智能物联网带来哪些新的可能性…

rust语言tokio库spawn, blocking_spawn等的使用

目录 tokio的spawn以及spawn_blocking的使用tokio::task::spawn方法解析tokio::task::spawn_blocking()方法解析 时间会遗忘一切 最后更新时间2024.04.29 tokio版本: tokio的spawn以及spawn_blocking的使用 tokio::task::spawn方法解析 tokio的实现原理以及源码…

密文域可逆信息隐藏技术综述(下)

与联合RDH-EI算法相比,可分离RDH-EI算法提取秘密信息时仅需要隐藏密钥,实现了加密者和隐藏者独立操作、互不干扰,扩大了RDH-EI的使用范围,得到了研究者的广泛关注。现有可分离RDH-EI可分为基于加密前预留空间(reserving room befo…