====>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-->类,进行下一步匹配