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并没有这个方法,所以也就造成了无法理解这里的逻辑,实际上要明白这个地方需要理解两个点

  1. python的中的mixin模式

  2. python中的mro查找算法

这里最重要的是理解mro查找算法, 这个因为细节过于多你可以百度一下,简单类说其实super方法就是去调用继承链的上一个类的方法,这里如果一个类 //img.mukewang.com/szimg/5c09d67400013e9b08370303.jpg 这里的LoginRequiredMixin
继承链的下一个类是View, 所以python会去View的类中去找dispath方法 你看看View的源码就知道里面有dispatch方法了,以及为什么会明白LoginRequiredMixin
不能单独使用了

1
0

Python3.6+django+xadmin,打造在线教育平台

【毕设】Python 2.7到3.6 完美适配,Django升级2.0

3677 学习 · 4038 问题

查看课程