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方法来实现,
基于装饰器来给单独函数设置认证或无需认证。