一、FBV(function base views)
就是在视图里使用函数处理请求
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/', views.index)
]
在视图函数中
def index(request):
二、CBV(class base views)
CBV就是在视图中使用类处理请求
实现本质:基于反射实现的
注意事项:
- cbv定义类的时候必须要继承view
- 在写url时,必须加as_view
- 类里面使用form表单提交的话,只有get和post方法
- 类里面使用ajax发送数据的话,支持定义以下很多方法(restful规范)
- get 获取数据
- post 创建新数据
- put 更新数据
- patch 局部更新
- delete 删除
- head
- options
- trace
优点:
- 提高了代码的复用性,可以面向对象的技术,比如多继承
- 可以用不同的函数针对不同的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_tocken验证的方法
1、针对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,之后需要认证可以导入
2、若是CBV(装饰器要加到dispatch方法上且使用method_decorator装饰)
或