# Django 登录时使用到的多继承

user.views类中的UserInfoView类中多继承LoginRequiredMixin, View。

from django.views.generic import View
from utils.mixin import LoginRequiredMixin
​
# UserInfoView
class UserInfoView(LoginRequiredMixin, View):
    '''用户中心-信息页'''
    def get(self, request):
        # page='user'
        return render(request, 'user_center_info.html')

urls配置:

url('^$', UserInfoView.as_view(), name='user')

LoginRequiredMixin类定义:

from django.contrib.auth.decorators import login_required
​
class LoginRequiredMixin(object):
    @classmethod
    def as_view(cls, **initkwargs):  # 这个as_view的参数必须与assp的urls中的as_view中的参数相同
        # 调用父类的as_view
        view = super(LoginRequiredMixin, cls).as_view(**initkwargs)  # python2的使用super的方式
        # super(FooChild,self) 首先找到 FooChild 的父类(就是类 FooParent),然后把类 FooChild 的对象转换为类 FooParent 的对象,来源于菜鸟教程
        return login_required(view)
  1. UserInfoView类自己本身没有as_view()方法,于是它调用父类的as_view()方法,
  2. 根据调用顺序(通过子类类名.__mro__可以查看),先调用LoginRequiredMixin的as_view()方法,
  3. 进入到LoginRequiredMixin的as_view()方法一看,又有一个super(LoginRequiredMixin, cls).as_view(**initkwargs)父类方法调用,
  4. 可是UserInfoView因为本身没有as_view()方法已经调用过一次LoginRequiredMixin父类的方法了,
  5. 所以,这次的他将按顺序调用View父类的as_veiw()方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值