Django中的FBV和CBV

本文深入探讨了Django框架中两种视图实现方式:基于函数的视图(FBV)与基于类的视图(CBV)。通过具体代码示例,详细对比了两者的写法与请求处理逻辑,帮助读者理解其工作原理与适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

昨天听老男孩it教育视频课的时候听到了fbv和cbv视图方式, 以前用django的时候用过这两种实现方式, 但是不知道专业的名字和区别, 直到昨天get到了.

一. 概念

FBV(function base views) 顾名思义基于函数的视图类

CBV(class base views)基于类的视图类

至于区别呢? 我觉得只是写法上的不一样, 实现的结果都是一样的, 我比较喜欢用CBV模式, 因为在Django中内部帮我做了请求方式的判断, 无需用户实现方法判断逻辑, 来看看代码的区别吧

二. 实现代码

1.FBV 

fbv就是在url中一个路径对应一个函数. 在工程下的url中写如下代码

from api import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('api.urls')),
    url(r'^test/', views.test_fbv)
]

然后在api的views中写如下测试函数:

def test_fbv(request):

    if(request.method == 'POST'):
        return HttpResponse("post")

    if (request.method == 'PUT'):
        return HttpResponse("put")

    if (request.method == 'GET'):
        return HttpResponse("get")

然后运行整个整个工程, 命令行输入python manage.py runserver

因为我的是linux系统, 就选用restclient这个插件进行api的测试

点完send后再看看 返回什么数据, 在response中可以 看到get

可以看到和我们想象的结果一样, 那我们在试试其他的请求方式, 比如put, post等 和我们代码写的一样, 这里我就不截图了

2. CBV

CBV就是在url中一个路径对应一个类

在上述工程下的urls下添加如下代码


urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('api.urls')),
    url(r'^test_FBV/', views.test_FBV),
    url(r'^test_CBV/', views.test_CBV.as_view())
]

注意当用cbv模式写url时类后面一定要用as_view()方法, 这是规定格式

然后在api下的views文件中写如以下逻辑代码

from django.views import View

class test_CBV(View):
    # 以get形式访问会执行get函数,一般情况下获取数据
    def get(self, *args, **kwargs):
        return HttpResponse('get')

    # 以post形式访问的话会执行post函数,一般情况下发送数据
    def post(self, *args, **kwargs):
        return HttpResponse('post')

 

这里做几点说明:

1.cbv模式下的视图类一定要继承Views类

2. 然后重定向get, post, put请求方法等, 实现不同的请求方法实现不同的逻辑代码, api验证这部分我就不说了, 直接用restclient测试就可以了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

零涂

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值