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"})
相关推荐
启山智软15 小时前
【单体系统与分布式系统是两种根本不同的软件架构模式】
java·vue.js·spring boot·后端·spring
互亿无线明明15 小时前
在 Go 项目中集成国际短信能力:从接口调试到生产环境的最佳实践
开发语言·windows·git·后端·golang·pycharm·eclipse
coderCatIce15 小时前
Spring AOP 核心知识笔记
后端
虎子_layor15 小时前
Spring 循环依赖与三级缓存:我终于敢说把这事儿讲透了
java·后端·spring
噔噔噔噔@15 小时前
详细介绍Python+Pytest+BDD+Playwright,用FSM打造高效测试框架
开发语言·python·pytest
海上彼尚15 小时前
Go之路 - 5.go的流程控制
开发语言·后端·golang
okseekw15 小时前
递归:不止是 “自己调用自己”,看完这篇秒懂
java·后端
sg_knight15 小时前
什么是设计模式?为什么 Python 也需要设计模式
开发语言·python·设计模式
温宇飞15 小时前
Drizzle ORM:类型安全的数据库开发
后端
SEO-狼术15 小时前
ASP.NET Zero v15.0.0 adds full .NET
后端·asp.net·.net