带有装饰器和会话的 django 类视图

2024-04-12

我正在尝试将一些 django 视图从基于函数的视图转换为基于类的视图,但遇到了一个小问题。

我的面向对象有点弱,我认为问题是我已经不知道事情的进展情况。

我有一个自定义的登录装饰器,我需要在视图上使用,所以我......

首先我有这个例子中的 View 类http://www.djangosnippets.org/snippets/760/ http://www.djangosnippets.org/snippets/760/

然后我的视图类看起来像这样......

class TopSecretPage(View):
    @custom_login
    def __call__(self, request, **kwargs):
        #bla bla view stuff...
        pass

问题是我的装饰器由于某种原因无法访问 request.session...

我的装饰器看起来像这样......

def myuser_login_required(f):
    def wrap(request, *args, **kwargs):

        # this check the session if userid key exist,
        # if not it will redirect to login page

        if 'field' not in request.session.keys():
        return wrap

我认为这很简单,我错过了所以感谢大家的耐心!

更新: 好吧,这是我得到的错误......

“ViewDoesNotExist:在模块projectname.application.views中尝试了TopSecretPage。错误是:类型对象'TopSecretPage'没有属性'session'”

我也简化了装饰器,看起来像这样......

def myuser_login_required(request, *args, **kwargs):


    # this check the session if userid key exist,
    # if not it will redirect to login page

    if 'username' not in request.session.keys():
        return  HttpResponseRedirect(reverse("login-page"))

    return True

对于应用于任何基于类的视图方法的任何装饰器,执行此操作的正确方法是使用django.utils.decorators.method_decorator()。我不确定 method_decorator() 何时被引入,但这里是 Django 1.2 中的示例/更新发行说明 https://docs.djangoproject.com/en/1.3/releases/1.2/#user-passes-test-login-required-and-permission-required。像这样使用它:

from django.utils.decorators import method_decorator

class TopSecretPage(View):
    @method_decorator(custom_login)
    def __call__(self, request, **kwargs):
        #bla bla view stuff...
        pass
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有装饰器和会话的 django 类视图 的相关文章

随机推荐

  • 如何读取 RCFile

    我正在尝试将一个小的 RCFile 约 200 行数据 读入 HashMap 中以进行 Map Side 连接 但是在将文件中的数据变为可用状态时遇到了很多麻烦 这是我到目前为止所拥有的 其中大部分来自这个例子 http sumit1001
  • 如何从列表中选择每个第n个元素[重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Haskell 中获取无限列表的每个第 N 个元素 https stackoverflow com questions 2026912 how to get every nth element
  • Java 流惰性 vs 融合 vs 短路

    我试图对 Java 流 API 中惰性求值的应用形成一个简洁而连贯的理解 目前我的理解是这样的 元素仅在需要时才被消耗 即流是惰性的 并且中间操作是惰性的 例如过滤器 仅在需要时进行过滤 中间操作可以融合在一起 如果它们是无状态的 短路操作
  • 具有多个字段的 Angular 模板驱动表单验证

    假设我有一个带有一些字段的简单表单 堆栈闪电战示例 https stackblitz com edit angular ktk7ez Component selector my app template h1 AppComponent h1
  • 使用基本 R 功能舍入 POSIX 日期 (POSIXct)

    我目前正在为我正在构建的包考虑很多日期和时间 绊倒这个post https stackoverflow com questions 8333838 how do you generate a sequence of the last day
  • 电子邮件解析云服务[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 似乎无法使用 Magit 推送到 GitHub

    我正在尝试在 Emacs 24 3 1 上使用 Magit 推送到 GitHub 存储库 请注意 我使用的是 Windows 盒子 我已经暂存并提交了对文件的更改 并且 M x magit status 仅反映驻留在我的存储库克隆中的未跟踪
  • xcodebuild 说不包含方案

    我有一个好奇心问题 我有一个项目 我一直在使用 XCode IDE 构建 并且运行良好 现在我正在设置 Bamboo 来构建项目 因此从命令行构建它 问题是 如果我从 GIT 中检查我的代码 然后使用 xcodebuild 来构建它 它会说
  • 如何对字符串中的子字符串重新排序?

    如何在 Perl 中的正则表达式中进行以下转换 British style US style 2009 27 02 gt 2009 02 27 我是 Perl 新手 对正则表达式了解不多 我能想到的就是提取 的不同部分 然后重新连接字符串
  • 使用 cassandra-cli 创建两个复合列

    我的列族需要两个复合列 关键数据类型是BytesType 以下是使用 CQL 的表定义 CREATE TABLE stats gid blob period int tid blob sum int uniques blob PRIMARY
  • 有没有办法用 EureakLog 进行正常日志记录?

    我正在使用 和旧版本 EurekaLog 它对于记录异常非常有用 但是有没有办法让它只正常记录事情呢 或者它根本不是为了这个目的 克里斯已经提到了我们的日志工具智能检测 http www gurock com smartinspect 谢谢
  • C++ 类设计、基类继承或外观设计模式

    我有一个愚蠢的 C 设计问题 有没有一种方法可以让一个类与多个类中的方法具有相同的方法名称 因此 具有相同的 API 我现在的情况是我有上课的情况 struct A void foo std cout lt lt A foo lt lt s
  • 如何继续 Subversion 中失败的加载

    我已经开始将颠覆转储加载到存储库中 在它完成之前 我耗尽了配额 命令停止了 我已要求更多配额 但现在我不知道如何继续进口 我应该简单地重做相同的命令吗 svnadmin load parent dir Software xxx module
  • Android UI - 动态添加按钮到 Gridview

    这就是我现在陷入困境的地方 我一直坚持向 gridview 动态添加按钮 我的 gridview 带有一个按钮 当用户单击该按钮时 会弹出上下文菜单 要求用户输入信息 完成后 使用该信息创建网格视图中的块 如图所示 我已经粘贴了代码 我不知
  • 如何更改 numpy 中的数组形状?

    如果我创建一个数组X np random rand D 1 它有形状 3 1 0 31215124 0 84270715 0 41846041 如果我创建自己的数组A np array 0 1 2 然后它就有了形状 1 3 看起来像 0 1
  • 如何将环境变量传递给 Jenkins 中的 sbt 测试构建步骤?

    在我的 scala 测试中 我通过以下方式读取了环境变量sys props getOrElse cassandra test host DEFAULT CASSANDRA TEST HOST 测试通过 Jenkins 运行 我添加了一个Bu
  • 设置不同颜色的 MapKit 引脚

    我是 iOS 新手 我实现了一个 MapKit 其中包含来自不同数组类型的静态标记 并且它们工作正常 例如 我尝试将来自商店数组的引脚设置为蓝色 以及来自社区读取的引脚等 我不知道该怎么做 无论如何 它们在地图上都是红色的 我的目标是改变每
  • R 和 android.R 类之间的区别[重复]

    这个问题在这里已经有答案了 任何人都可以从这个问题解释一下吗 R 之间有什么区别 R id myListView android R layout simple list item 1 这两个 R 不是同一类吗 R layout R id
  • 缓存文件模型 cakePHP

    将模型文件缓存在 app tmp cache models 中 我设置配置 Cache config default array engine gt File duration gt 3600000 serialize gt false 为
  • 带有装饰器和会话的 django 类视图

    我正在尝试将一些 django 视图从基于函数的视图转换为基于类的视图 但遇到了一个小问题 我的面向对象有点弱 我认为问题是我已经不知道事情的进展情况 我有一个自定义的登录装饰器 我需要在视图上使用 所以我 首先我有这个例子中的 View