mixin多继承包装过程

应用中使用django.view.generic中的视图类View,  之后使用django.contrib.auth的login登录模块.. 但, 装饰包内login_required登录验证模块无法直接对类进行装饰

utils内创建一个多继承mixin模块, 通过二次包装解决此问题.

 

# utils 有用的工具, 类, 函数. 框架中所有复用工具, 都放在这个单独的文件包
# mixin 代表多继承

from django.contrib.auth.decorators import login_required

# 实现用户登录状态验证的方法. 定义login_required_mixin的类, 为login_required增加对提交方法的识别.

# 视图类先继承于此类, 然后继承视图类.
判断其是否有登录状态, 之后在决定运行还是跳转. class LoginRequiredMixin(object): # 定义和视图类相同的as_view方法, (参数需要和视图类中完全相同) @classmethod def as_view(cls, **initkwargs): # 调用父类的as_view view = super(LoginRequiredMixin, cls).as_view(**initkwargs) # 重点: 返回的时候使用login_required包装 return login_required(view) # 小结: # 在此工具中, 调用父类的as_view方法, 以及相同参数的设置, 都只是为了, 在函数继承的时候 # 先于原本的as_view进行调用, 可以替代原本 视图类中的方法, # 之后再在mixin中, 使用super调用父类的as_view, 因为mixin中已经被调用过, 会寻找并调用第二个父类中的同名方法(多继承链) # mixin调用到View视图类的as_view方法后, 在return返回的时候, 加了一层login_required的包装 # 这样 , 完成了原本在urls中函数嵌套的过程

 

转载于:https://www.cnblogs.com/jrri/p/11537819.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值