首页 > 技术文章 > Django两种对应关系:FBV & CBV

bocaimao 2020-05-30 07:41 原文

====>Django有两种对应关系

view:

1.  FBV:function base view  函数

  /index/ ->函数名 请求发来后,执行函数

    传统python函数的写法。

  def index(request,*args,**kwargs):
  ..

2.  CBV:class base view 类
  /index/ ->类 请求发来后,执行类里面指定的方法

  class Home(views.View):
  def get(self,reqeust,*args,**kwargs):

 1 # 类对应关系的写法
 2 from django.views import View #此处必须导入views
 3 class Home(View):
 4     # dispatch相当于做一个反射的功能
 5     def dispatch(self, request, *args, **kwargs):
 6         # 调用父类中的dispatch
 7         print('before')
 8         result = super(Home,self).dispatch(request, *args, **kwargs)
 9         print('after')
10         return result
11 
12     def get(self,request):
13         print(request.method)
14         return render(request, 'home.html')
15 
16     def post(self,request):
17         print(request.method,'POST')
18         return render(request, 'home.html')

 

3.urls.py文件中,二者的写法:

1 urlpatterns = [
2     # url(r'^home/', views.home),#函数对应关系的URL写法
3     
4     url(r'^home/', views.Home.as_view()),  # 类对应关系的URL写法
5 ]

django内部如何完成CBV操作?(基于反射查找)

用户发来请求(请求头+请求的内容,URL+request method )-->Django   请求的数据拿到后,基于反射找到method(dispatch相当于做一个反射的功能)

请求包含:以字符串的形式发到服务器端,先匹配URL-->找类,在method-->类,进行下一步匹配

推荐阅读