Django内置auth模块中login_required装饰器用于类视图的优雅方式

使用多继承 以及类似java中的静态代理模式

原理:OrderView.as_view()根据广度优先,调用的是LoginRequiredMixin中的as_view(cls, *args, **kwargs)

这时的cls=OrderView

接下来super(LoginRequiredMixin, cls).as_view(*args, **kwargs) 会调用到View类中的as_view()并返回一个视图函数

然后,用将这个视图函数作为参数传给Login_required()并返回经过装饰的结果

class A(object):
 @classmethod
 def do(cls):
     print(‘我是你的眼‘)

class B(object):
 @classmethod
 def do(cls):
     print(cls)
     super(B, cls).do()
     print("--" * 12)

class C(B, A):
 pass

if __name__ == ‘__main__‘:
 C.do()

<class ‘__main__.C‘>
我是你的眼
------------------------    
from django.contrib.auth.decorators import login_required

class LoginRequiredMixin(object):
    @classmethod
    def as_view(cls, *args, **kwargs):
        view = super(LoginRequiredMixin, cls).as_view(*args, **kwargs)
        return login_required(view)

# /user/order
class OrderView(LoginRequiredMixin, View):
    """ 用户中心 订单 """

    def get(self, request):
        context = {‘page‘: ‘order‘}
        return render(request, ‘user/user_center_order.html‘, context)        

urlpatterns = [
    url(r‘^order/$‘, views.OrderView.as_view(), name=‘order‘),
]
                                      

原文地址:https://www.cnblogs.com/endurance9/p/10290057.html

时间: 2024-10-04 00:09:14

Django内置auth模块中login_required装饰器用于类视图的优雅方式的相关文章

django的权限认证:登录和退出。auth模块和@login_required装饰器

在settings.py中配置LOGIN_URL参数: # 用户访问带有(@login_required)标签的页面(view)时,如果没有登录,就会跳转到LOGIN_URL(即登陆url). LOGIN_URL = '/login/' 使用django自带的auth模块进行登录和退出: from django.contrib.auth.models import User from django.contrib import auth from django.http.response imp

python之路基础-(二)内置函数、函数、装饰器

内置函数 python内置了以下函数,可以根据情况来使用 一.数学相关函数 divmod():取商和余数 >>> divmod(99,10) (9, 9) abs():取绝对值 >>> abs(-10) 10 len():查看序列长度 >>>list = [11,22,33,44] >>>r = len(list) >>>print(r)4 二.功能相关函数chr():在ascii码表中根据数字找出对应的字母 >

Django CSRF与auth模块

目录 Django CSRF与auth模块 CSRF CSRF相关装饰器 auth模块 扩展默认的auth_user表 Django CSRF与auth模块 CSRF FORM表单中怎么通过CSRF校验 只需要在form表单中写一个 {% csrf_token %} ajax通过asrf校验有三种方法 $.ajax({ url:'', type:'post', {#data:{'username':'yang'},#} //第一种方式 自己手动获取 {#data:{'username':'yan

Django内置Admin

Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件,使用方式有: 依赖APP: django.contrib.auth django.contrib.contenttypes django.contrib.messages django.contrib.sessions 模板的context_processors: django.contrib.auth.context_processors.auth django.contrib.messages.context_

django 内置 admin

Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件使用方式有 依赖APP         django.contrib.auth         django.contrib.contenttypes         django.contrib.messages         django.contrib.sessions     模板的context_processors         django.contrib.auth.context_processo

Django内置过滤器详解附代码附效果图--附全部内置过滤器帮助文档

前言 基本环境 Django版本:1.11.8 Python版本:3.6 OS: win10 x64 本文摘要 提供了常用的Django内置过滤器的详细介绍,包括过滤器的功能.语法.代码和效果示例. 本文完整项目文件代码下载地址:完整示例 Django完整内置过滤器帮助文档:Django内置过滤器完整版 参考文献:Django 中文文档 1.8 内置过滤器 注意:所有带参数的过滤器,在使用时,冒号:和参数中间不能有空格. add加 功能: 把add后的参数num加给value: 数字相加会进行算

Django内置模板标签

Django内置标签总览 可以查询下表来总览Django的内置标签: 标签 说明 autoescape 自动转义开关 block 块引用 comment 注释 csrf_token CSRF令牌 cycle 循环对象的值 debug 调试模式 extends 继承模版 filter 过滤功能 firstof 输出第一个不为False的参数 for 循环对象 for … empty 带empty说明的循环 if 条件判断 ifequal 如果等于 ifnotequal 如果不等于 ifchange

django 内置“信号”机制和自定义方法

一.引子 在操作数据的时候,假设我们需要记录一些日志,这个时候,我们需要用什么来显示这个需求呢?装饰器?装饰器只能先实现整体的操作.在django 里面有这么一个东西--信号 下面我们就来了解了解它. 操作对象前后,django都会预留两个钩子,它是用signals.post_save.send,表示触发一个信号.所以比如说我们在操作数据库的时候,要在插入数据之前写入日志,插入完成之后也写入日志,那这个就会用到我们今天的django信号.Django中提供了“信号调度”,用于在框架执行操作时解耦

Django框架进阶6 多对多三种创建方式, Ajax, Content-Type前后端传输数据编码格式, Ajax发送文件数据, django内置的序列化功能, Ajax结合sweetalert实现删除二次确认, 批量插入数据, 自定义分页器, ajax结合sweetalert实现删除二次确认

多对多三种创建方式 1.全自动(较为常用) class Book(models.Model): title = models.CharField(max_length=32) authors = models.ManyToManyField(to='Author') # orm就会自动帮你创建第三张表 class Author(models.Model): name = models.CharField(max_length=32) ''' 好处:第三张表自己创建 不足之处:第三张表无法扩展额外