Django框架的FBC和CBV是什么?小白教程

鳄鱼君

发表文章数:531

Vieu四代商业主题

高扩展、安全、稳定、响应式布局多功能模板。

¥69 现在购买
首页 » Python教程 » Django框架的FBC和CBV是什么?小白教程

django工程中的urls.py文件是下面的样子:

from django.contrib import admin
from django.urls import path
from myapp import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/',views.index)
]

一个URL对应一个函数名,URL匹配成功之后,会返回函数,函数的第一个参数就封装了用户请求的信息,我们在后台获取数据,只需要取这个参数中取就可以了,前面一直是request这个参数,名字不固定但一定要有参数!这其实就是FBC:Function Base View,那么CBV:Class Base View。对于Django提供了两种对应关系,URL-函数名,也可以是URL-类名。对于函数来说,请求来了会执行函数,对于类来说,请求来了会执行类里面固定的方法:

urls.py

from django.contrib import admin
from django.urls import path
from myapp import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/',views.Index.as_view())  #执行类的as_view()方法,固定的用法
]

views.py

from django.shortcuts import render
from django.views import View
class Index(View):
    #如果GET请求执行get方法
    def get(self,request):
        print(request.method)
        return render(request, 'index.html')
    #如果POST请求执行post方法
    def post(self,request):
        print(request.method) 
        return render(request, 'index.html')

这是固定的用法,我们不用再判断请求是什么,只需要定义对应的函数就可以了,django已经帮我们处理好了。查看View类,我们可以发现请求的方式有:

 http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']

也就是说,用户以什么方式提交数据,你写一个对应方式的函数就可以了,这就是CBV。我们思考一下django是怎么处理用户发送过来的数据的呢:

    def dispatch(self, request, *args, **kwargs):
        # Try to dispatch to the right method; if a method doesn't exist,
        # defer to the error handler. Also defer to the error handler if the
        # request method isn't on the approved list.
        if request.method.lower() in self.http_method_names:
            handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
        else:
            handler = self.http_method_not_allowed
        return handler(request, *args, **kwargs)

这段代码是在View类中找到的,可以看到django帮我们进行判断,并把method转换为小写,所以说我们的函数只能是小写的。也就是在执行Index类中的get和post函数之前,就会执行dispatch函数。那么我们可以在Index类中重写dispatch函数,那么在请求过来的时候就会执行我们定义的dispatch函数了:

from django.shortcuts import render
from django.views import View
class Index(View):
    def dispatch(self, request, *args, **kwargs):
        #再请求到get或者post函数之前都会执行以下代码 自定制操作
        print('请求之前')
        result=super(Index,self).dispatch(request,*args,**kwargs)  #继承父类dispatch的方法
        print('请求之后')
        return result   #返回result
    #如果GET请求执行get方法
    def get(self,request):
        print(request.method)
        return render(request, 'index.html')
    #如果POST请求执行post方法
    def post(self,request):
        print(request.method)
        return render(request, 'index.html')

我们定义了dispatch函数并且继承父类的dispatch,然后做了一些打印操作,程序照样可以运行,也就是我们可以做一些特别的处理,定制某些功能!可以看到我们使用CBV或者FBV都可以实现相同的功能,以后可以两者结合使用,练习一下。

– END –

未经允许不得转载:作者:鳄鱼君, 转载或复制请以 超链接形式 并注明出处 鳄鱼君
原文地址:《Django框架的FBC和CBV是什么?小白教程》 发布于2020-04-10

分享到:
赞(2) 赏杯咖啡

评论 抢沙发

5 + 3 =


文章对你有帮助可赏作者一杯咖啡

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.6主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册