CBV:
class、 base、 view
路由: url(r'students/', views.StudentsView.as_view()) 视图: from django.views import View class StudentsView(View): def get(self, request, *args, **Kwargs): return HttpResponse('GET') def post(self, request, *args, **kwargs): return HttpResponse('POST') def put(self, request, *args, **kwargs): return HttpResponse('PUT')
def delete(self, request, *args, **kwargs): return HttpResponse('DELETE')
FBV:
functions、 base、 view
def users(request): user_list = ['wyc', 'test'] return HttpResponse(json.dumps(user_list))
django中间件五种方法:
process_request
process_view
process_exception
process_response
process_render_template
用中间件做过什么?
权限 用户登录认证 django的csrf是怎么实现的: 原理: 请求拿去token, 然后验证是否是以前发送的, 如果是以前发送的就验证通过,否则失败。 解决办法: from django.view.decorators.csrf import csrf_exempt @csrf_exempt # 表示不用认证 实现方式: process_view方法 检查是否被 @csrf_exempt (免除csrf认证) 去请求体或cookie获取token csrf_protect # 函数认证
CBV解决csrf的问题
from django.utils.decorators import method_decorator
加到函数dispatch函数
@method_decorator
def dispatch(self, request, *args, **kwargs):
return super(StudentsView, self).dispatch(request, *args, **Kwargs)
第二种解决办法:
直接在类上边添加
@method_decorator(csrf_exempt, name='dispatch')
总结:
CBV: 基于用户的请求和方法来进行反射。
流程:
请求先到路由,路由再到View,View在到源码dispatch函数进行请求反射。
取消csrf认证,需要加到dispatch方法上,用装饰器的形式添加(method_decorator)来装饰。
扩展:
csrf
基于中间件的process_view方法来实现,
基于装饰器来给单独函数设置认证或无需认证。