装饰器
一、django
中定义视图有两种方式
- 1、基于函数的方式
- 2、基于类的方式(
CBV
)
二、django
中常见的装饰器
三、在CBV
中使用装饰器
1、直接使用
from django.contrib.auth.decorators import login_required, permission_required from django.utils.decorators import method_decorator class HomeView(View): def dispatch(self, request, *args, **kwargs): return super(HomeView, self).dispatch(request, *args, **kwargs) @method_decorator(login_required) def get(self, request): return render(request, "home.html") @method_decorator(permission_required) def post(self, request): return redirect("/index/")
2、或者使用在类上面
from django.shortcuts import render from django.views.generic import View from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator @method_decorator(login_required, name='dispatch') class MyBlogsView(View): """ 个人博客 """ def get(self, request, *args, **kwargs): return render(request, 'my-blogs.html', locals())
四、关于csrf
的装饰器
- 1、中间件
django.middleware.csrf.CsrfViewMiddleware
在全局中配置了 - 2、局部使用装饰器
from django.views.decorators.csrf import csrf_exempt,csrf_protect
@csrf_protect
,为当前函数强制设置防跨站请求伪造功能,即便settings
中没有设置全局中间件。@csrf_exempt
,取消当前函数防跨站请求伪造功能,即便settings
中设置了全局中间件。