FBV
CBV
-
就是在视图里使用类处理请求
-
优点
- 提高了代码的复用性,可以使用面向对象的技术,比如说Mixin(多继承)
- 可以用不同的函数针对不同的HTTP方法处理,而不是通过很多if判断,提高了代码可读性
-
代码逻辑
url
from django.conf.urls import url from myapp.views import MyView urlpatterns = [ url(r'^index/$', MyView.as_view()), ]view.py
from django.http import HttpResponse from django.views import View class GreetingView(View): name = "lin" def get(self, request): return HttpResponse(self.name) -
实现本质: 基于反射实现的
-
流程:由路由---->as_view()方法--->view中的dispatch方法(反射实现的)
首先执行url中的as_view()方法
执行view方法
csrf
- 403报错原理是:基于中间件的process_view方法
- 装饰器给单独函数进行设置(认证或跳过认证)
免除csrf_token验证的方法
-
针对FBV
from django.views.decorators.csrf import csrf_exempt @csrf_exempt # 这个函数不走认证 def user(request): pass #走post请求时,就可以免除验证了 -
注释setting.py中的46行代码之后单独需要验证的方法
from django.views.decorators.csrf import csrf_protect @csrf_exempt # 这个函数需要认证 def user(request): pass #注释掉setting中的csrf,之后需要认证可以导入 -
如果是CBV
或者