FBV和CBV的区别
一、CBV Class-Base-View
CBV是采用面向对象的方法写视图文件
执行流程:
浏览器向服务器发送请求,
服务器端的urls.py根据请求匹配URL,找到要执行的视图类,
执行dispatch方法区分出是POST还是GET请求,
执行views.py对应类中的POST方法或者GET方法。
url中:
url(r'^add_class/$', views.AddClass.as_view()),
views中:
from django import views #在views.py的基础上添加 class Login(views.Views): def get(self,request) pass def pass(self,request) pass
使用装饰器:
类中的方法与独立函数不完全相同,因此不能直接将函数装饰器应用于类中的方法 ,我们需要先将其转换为方法装饰器。 Django中提供了method_decorator装饰器用于将函数装饰器转换为方法装饰器。 class Login(views.View): @method_decorator(outer) def get(self,request,*args,**kwargs): pass
二、FBV
FBV即在views.py中以函数的形式写视图
urls:
url(r'index/',views.index)
views.py:
from django.shortcuts import render def index(request): pass
装饰器:
FBV本身就是一个函数,所以和给普通的函数加装饰器无差: def wrapper(func): def inner(*args, **kwargs): start_time = time.time() ret = func(*args, **kwargs) end_time = time.time() print("used:", end_time-start_time) return ret return inner @wrapper def add_class(request): pass
本质上FBV和CBV都是一样的,因为url对应都是一个函数。
url(r'^order/', views.order,name='order'), # 1. 对应order函数;2.一旦请求到来,立即执行order函数
url(r'^center/', views.CenterView.as_view(),name='center'),
# 1. url对应 views.CenterView.as_view()会返回一个view函数;
2. 请求到来之后,立即执行view函数,view由会触发dispatch方法、
dispatch会根据method不同根据反射执行get/post/delete...的方法。

浙公网安备 33010602011771号