Django的FBV和CBV的示例讲解


本文摘自php中文网,作者不言,侵删。

本篇文章给大家带来的内容是关于Django的FBV和CBV的示例讲解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

FBV : function base views, 就是在视图里使用函数处理请求。

1

2

3

4

5

6

urlpatterns = [

    path('index/', views.index),

]

# 视图函数里

def index(request):

    return render(request,"index.html")

CBV : class base views, 就是在视图里使用类处理请求。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

urlpatterns = [

    path("login/",views.LoginView.as_view())

]

# 视图函数里

class LoginView(View):

 

    def dispatch(self, request, *args, **kwargs):

        """

        重写dispatch方法, 可以放一些专属于LoginView的操作

        """

        return ...

 

    def get(self,request):

        return HttpResponse("OK")

 

    def post(self,request):

        return HttpResponse("OK")

 

    def put(self,request):

        return HttpResponse("OK")

 

    def delete(self,request):

        return HttpResponse("OK")

CBV的源码剖析:

Django的url是将一个请求分配给可调用的函数的,而不是一个class。针对这个问题,class-based view(即Django的基础View类)提供了一个 as_view() 的静态方法(也就是类方法),调用这个方法,会通过 self = cls(**initkwargs) 创建一个类的实例,然后通过实例调用 dispatch()方法,dispatch()方法会根据request的method的不同调用相应的方法来处理request(如get() , post()等)。到这里,这些方法和function-based view差不多了,要接收request,得到一个response返回。如果方法没有定义,会抛出HttpResponseNotAllowed异常。

为什么要有CBV这种模式?

python的一大重要的特性就是面向对象。而cbv更能体现python的面向对象。cbv是通过class的方式来实现视图方法的。class相对于function,更能利用多态的特定(多态: 可对不同类的对象使用同样的操作),因此更容易从宏观层面上将项目内的比较通用的功能抽象出来。

以上就是Django的FBV和CBV的示例讲解的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

Python如何打印99乘法表

Python面向对象之访问限制

range的用法介绍

Python中pass语句意义与作用(实例分析)

有了Python还用得着excel吗?

shell可以执行Python

Python中怎么实现保留两位小数

conda install和pip install的区别有哪些?

关于Python装饰器的详细介绍

pandas 实现将重复表格去重,并重新转换为表格

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...