之前介绍了FBV和CBV ,下面我们看一下CBV中的dispatch
dispatch函数在类View中定义,作用就是通过反射查找get或post函数,所以在执行get或post函数之前,dispatch函数是肯定会被执行的。因此我们可以通过super,来重写dispatch,达到一个类似装饰器的功能。
views.py
from django.shortcuts import render from django.views import View class Index(View): def dispatch(self, request, *args, **kwargs): print('Before') ret = super(Index, self).dispatch(request, *args, **kwargs) print('After') return ret def get(self, req): print('method is :' + req.method) return render(req, 'index.html') def post(self, req): print('method is :' + req.method) return render(req, 'index.html')
后台输出:
Before
method is :GET
After
Before
method is :POST
After
可见,我们可以在执行get或者post函数时,通过dispatch函数做一些自己想做的事情。