[oldboy-django][2深入django]FBV + CBV + 装饰器
FBV
1 django CBV & FBV - FBV function basic view a. urls 设置 urls(r'^test.html$', views.test) b. views写法 def test(request): return ... c. FBV添加装饰器 - 定义装饰器 def wrapper(func): def inner(*args, **kwargs): return func(*args, **kwargs) return inner - 使用装饰器方法 @wrapper def test(request): pass
CBV
- CBV class basic view a. urls 设置 urls(r'^login.html$', views.Login.as_view()) b. views写法 from django.views import View class Login(View): def get(self,request): return render(request, 'login.html') def post(self,request): return HttpResponse("dd") c. 注意事项 - urls 里面 views.类名.as_view() 固定写法 - views的类 a.需要继承from django.views import View b.函数需要一个参数request c.函数名字:get, post, put, delete - 函数名字对应请求类型 - form表单只能是get和post提交 - ajax提交数据可以是get, post, put, delete - get(查),post(创建), put(更新), delete(删) d.dispatch函数实现get, post执行前后定制一些操作 - dispatch作用 函数发送请求到url后,CBV第一步调用的是dispatch函数,然后再执行get,post函数 其实是在dispatch函数里面调用get,post函数 - 自定义dispatch函数 def dispatch(self, request, *args, **kwargs): print('before') obj = super(Login,self).dispatch(request, *args, **kwargs) print('after') return obj
CBV添加装饰器
f CBV添加装饰器(django有限制) - 定义装饰器 def wrapper(func): def inner(*args, **kwargs): return func(*args, **kwargs) return inner - 导入django使用FBV装饰器的方法 from django.utils.decorators import method_decorator - 添加装饰器方式 1. 在类里面的多个函数添加 class Foo(View): @method_decorator(wrapper) def get(self,request): pass @method_decorator(wrapper) def post(self,request): pass 2.对类的多个函数都添加装饰器 @method_decorator(wrapper, name='post') @method_decorator(wrapper, name='get') class Foo(View): 3.对类所有函数添加装饰器 @method_decorator(wrapper, name='dispatch') class Foo(View): # 请求来了,到dispatch函数,dispatch根据反射调用不同的函数