Django之FBV和CBV

一、FBV与CBV

在我们日常学习Django中,都是用的FBV(function base views)方式,就是在视图中用函数处理各种请求。而CBV(class base view)则是通过类来处理请求。

Python是一个面向对象的编程语言,如果只用函数来开发,有很多面向对象的优点就错失了(继承、封装、多态)。所以Django在后来加入了Class-Based-View。可以让我们用类写View。

这样做的优点主要下面两种:

  1. 提高了代码的复用性,可以使用面向对象的技术,比如Mixin(多继承)
  2. 可以用不同的函数针对不同的HTTP方法处理,而不是通过很多if判断,提高代码可读性;

二、示例

1、urls.py

python 复制代码
from django.urls import path
from app01 import views

urlpatterns = [
    # path('admin/', admin.site.urls),

    #FBV路由写法,基于函数
    path('auth/', views.auth),

    #CBV写法,基于类的路由写法
    path('user/',views.UserView.as_view()),

2、views.py

python 复制代码
from django.http import JsonResponse
from django.views import View

#FBV的写法
def auth(request):
    if request.method == "GET":
        return JsonResponse({"status":True,"message":"GET"})
    elif request.method == "POST":
        return JsonResponse({"status": True, "message": "POST"})
    return JsonResponse({"status":True,"message":"..."})

#CBV写法
class UserView(View):
    def get(self,request):
        return JsonResponse({"status":True,"message":"get"})

    def post(self,request):
        return JsonResponse({"status":True,"message":"post"})

    def put(self,request):
        return JsonResponse({"status": True, "message": "put"})

    def delete(self,request):
        return JsonResponse({"status": True, "message": "delete"})
相关推荐
快乐流星1 小时前
从 SRT 到 MP4:用 Python 把番剧解说制作拆成 10 个可重跑阶段
后端
小嘉丶学长1 小时前
Day08 · 字符串(二)
服务器·开发语言·python·学习·1024程序员节
BD_Marathon1 小时前
【Python】列表推导式
python
狂潮lister1 小时前
狂潮 · 元理论v1.0-原创架构设计-AI 网关 | 第9篇:KC-AI‑Gateway(一套可审计的大模型网关完整架构实践)|【完整版】
人工智能·后端
张一凡931 小时前
AI 改完代码,人却不知道它改了什么:架构漂移才是真正的成本
前端·后端·agent
鶴哥只手遮天1 小时前
雷达系统与成像仿真:从电磁散射到工程实现-第 2 章 雷达方程、链路预算与探测边界
后端
ZhengEnCi2 小时前
AI时代什么样的程序员不会被淘汰:三种代码组织方式的改动成本实测
后端
2501_948122632 小时前
Qs 跨端三方库仓颉适配全流程
python·react native·django·tornado
萌动的小火苗2 小时前
MQTT的QoS0、QoS1、QoS2有什么区别?
开发语言·网络·python·php·信息与通信
forest_092 小时前
《大模型原理通俗讲》系列 00|开篇 大模型到底是怎么回事
人工智能·python·prompt·agi