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"})
相关推荐
灯澜忆梦几秒前
【基于GO的Web开发14】gin请求重定向
前端·后端·golang·gin
一晌小贪欢4 分钟前
Python办公17:暴力拆分——按页数或指定范围提取 PDF 核心页面
java·开发语言·python·pdf·excel·数据可视化·python办公
青 春 记 忆5 分钟前
零基础入门python31:Django商城第一步——创建项目并跑通第一个请求
python·django·后端开发
孫治AllenSun5 分钟前
【LangChain4J-06】Prompt 工程与模板化开发
开发语言·python·prompt
qq_426003967 分钟前
多语言新增语种全量测试策略
前端·javascript·python·pycharm·自动化
东风破_9 分钟前
博客数据库进阶设计:点赞、收藏、评论、标签与文件表怎么建?
后端·mysql
AuLuo-10 分钟前
SearXNG 物理机部署搭建免费搜索引擎服务
python·搜索引擎
夕除14 分钟前
redis--009
redis·后端
言乐625 分钟前
Python关于老游复刻与创新2
前端·javascript·css·python·css3
青 春 记 忆9 小时前
Dify Docker Compose 通用无损升级指南:从备份、双版本预演到切换与回滚
运维·人工智能·python·docker·容器