python web全栈,  python全栈,  后端开发,  系统运维

CBV(基于class 的视图逻辑) 使用装饰器

  • 方法一: 每个方法都加装饰器
from django.shortcuts import render, HttpResponse
from django.utils.decorators import method_decorator
from django.views import View

# Create your views here.

import logging
loger = logging.getLogger('django')

def outer(f):
    def inner(*args, **kwargs): # 传入万能参数
        print('before')
        ret = f(*args, **kwargs)
        print(ret)
        print('after')
        return ret
    return inner

@outer
def index(request):
    return HttpResponse('FBV--ok')

# CBV 使用装饰器需要借助django的 method_decorator
# 方法一:每个方法都加装饰器
class indexView(View):
    @method_decorator(outer)
    def get(self, request):
        return HttpResponse('CBV--ok')

    # @method_decorator(outer)
    def post(self, request):
        return HttpResponse('CBV--ok')
  • 方法二: 整个类统一添加装饰器

from django.shortcuts import render, HttpResponse
from django.utils.decorators import method_decorator
from django.views import View

# Create your views here.

import logging
loger = logging.getLogger('django')

def outer(f):
    def inner(*args, **kwargs):
        print('before')
        ret = f(*args, **kwargs)
        print(ret)
        print('after')
        return ret
    return inner

@outer
def index(request):
    return HttpResponse('FBV--ok')

class indexView(View):

    @method_decorator(outer)
    # 重写父类方法
    def dispatch(self, request, *args, **kwargs):
        print('before')
        ret = super().dispatch(request, *args, **kwargs)
        print('after')
        return ret

    # @method_decorator(outer)
    def get(self, request):
        return HttpResponse('CBV--ok')

    # @method_decorator(outer)
    def post(self, request):
        return HttpResponse('CBV--ok')

留言

您的电子邮箱地址不会被公开。 必填项已用*标注

闽ICP备20008591号-1