Django中的FBV和CBV

昨天听老男孩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测试就可以了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

零涂

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

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

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

打赏作者

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

抵扣说明:

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

余额充值