dispatch 的理解
来源:8-7 相关课程推荐
qq_书山压力大EE_0
2018-12-05
mixin_utils.py中
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
class LoginRequiredMixin(object):
@method_decorator(login_required(login_url='/login/'))
def dispatch(self, request, *args, **kwargs):
return super(LoginRequiredMixin, self).dispatch(request, *args, **kwargs)
super(dispatch )是从谁那里 获取的dispatch? object 类吗?
在调试django程序时, 返现如果错处, 程序 会跑到 有dispatch类的 一些地方去, 那些dispatch 都是什么意思?
写回答
1回答
-
bobby
2018-12-07
很多学习pythond的人会错误的认为super就是调用父类的方法,所以就会错误的认为这里是调用了object的dispatch方法,但是object并没有这个方法,所以也就造成了无法理解这里的逻辑,实际上要明白这个地方需要理解两个点
python的中的mixin模式
python中的mro查找算法
这里最重要的是理解mro查找算法, 这个因为细节过于多你可以百度一下,简单类说其实super方法就是去调用继承链的上一个类的方法,这里如果一个类 这里的LoginRequiredMixin
继承链的下一个类是View, 所以python会去View的类中去找dispath方法 你看看View的源码就知道里面有dispatch方法了,以及为什么会明白LoginRequiredMixin
不能单独使用了10
相似问题