装饰器

一、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中设置了全局中间件。

results matching ""

    No results matching ""