将 ETag / Last-Modified 装饰器与 Django 基于类的通用视图一起使用

2023-12-31

我最近将 Django 项目之一中的所有视图迁移到新的基于类的视图。对于经典的基于函数的 Django 视图,有一个方便的装饰器django.views.decorators.http.condition如果存在与您指定的条件匹配的缓存副本,则可以使用它来绕过整个视图处理。我在文档和源代码中到处搜索,但找不到新的基于类的视图的任何实现。

所以我的问题是:您建议我如何为基于类的视图实现条件视图处理?


看来这个问题还没有一个很好的答案。对于仅设置函数属性的装饰器(例如csrf_exempt),将它们应用到视图类就足够了dispatch方法,但这显然不适用于condition装饰器,因为他们期望第一个函数参数是请求对象而不是self.

实现这一目标的两种方法包括:

  1. 将装饰器应用到生成的视图函数。通用视图功能实际上可以归结为一种从类构建视图函数的方法,因此稍后应用装饰器可能是一种选择。像这样的东西:

    f = ViewClass.as_view()
    f = condition(...)(f)
    

    这样做的缺点是您无法从传递给的函数访问视图类condition装饰师。如果你打电话的话也不是很方便as_viewurlconf 中的方法。

  2. 委托给一个简单的函数,您可以将装饰器应用到视图内部dispatch方法。像这样的东西:

    def dispatch(self, request, *args, **kwargs):
        @condition(...)
        def _dispatch(request, *args, **kwargs):
            return super(ViewClass, self).dispatch(request, *args, **kwargs)
        return _dispatch(request, *args, **kwargs)
    

    这样做的好处是,您可以在应用装饰器时访问视图类实例,因此您可以将实例方法用于缓存验证函数。缺点是装饰器将在每次调用视图时运行,但这对于这个特定的装饰器来说似乎不是问题。

不过,这两种解决方案都有其问题,因此也许值得提交错误报告或在 django 用户邮件列表上询问如何最好地结合这两个概念。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 ETag / Last-Modified 装饰器与 Django 基于类的通用视图一起使用 的相关文章

  • DreamPie 不适用于 Python 3.2

    我最喜欢的 Python shell 是DreamPie http dreampie sourceforge net 我想将它与 Python 3 2 一起使用 我使用了 添加解释器 DreamPie 应用程序并添加了 Python 3 2
  • 如何在 success_url 中传递上下文数据?

    我制作了一个表单 我希望再次返回相同的表单 这次使用可在我的模板中使用的上下文数据来显示表单已成功发送 我怎样才能做到这一点 class ContactUsView FormView form class ContactUsForm tem
  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看
  • Spark的distinct()函数是否仅对每个分区中的不同元组进行洗牌

    据我了解 distinct 哈希分区 RDD 来识别唯一键 但它是否针对仅移动每个分区的不同元组进行了优化 想象一个具有以下分区的 RDD 1 2 2 1 4 2 2 1 3 3 5 4 5 5 5 在此 RDD 上的不同键上 所有重复键
  • Python tcl 未正确安装

    我刚刚为 python 安装了graphics py 但是当我尝试运行以下代码时 from graphics import def main win GraphWin My Circle 100 100 c Circle Point 50
  • __del__ 真的是析构函数吗?

    我主要用 C 做事情 其中 析构函数方法实际上是为了销毁所获取的资源 最近我开始使用python 这真的很有趣而且很棒 我开始了解到它有像java一样的GC 因此 没有过分强调对象所有权 构造和销毁 据我所知 init 方法对我来说在 py
  • 从列表中的数据框列中搜索部分字符串匹配 - Pandas - Python

    我有一个清单 things A1 B2 C3 我有一个 pandas 数据框 其中有一列包含用分号分隔的值 某些行将包含与上面列表中的一项的匹配 它不会是完美的匹配 因为它在其中包含字符串的其他部分 该列 例如 该列中的一行可能有 哇 这里
  • NameError:名称“urllib”未定义”

    CODE import networkx as net from urllib request import urlopen def read lj friends g name fetch the friend list from Liv
  • python pandas 中的双端队列

    我正在使用Python的deque 实现一个简单的循环缓冲区 from collections import deque import numpy as np test sequence np array range 100 2 resha
  • ExpectedFailure 被计为错误而不是通过

    我在用着expectedFailure因为有一个我想记录的错误 我现在无法修复 但想将来再回来解决 我的理解expectedFailure是它会将测试计为通过 但在摘要中表示预期失败的数量为 x 类似于它如何处理跳过的 tets 但是 当我
  • 在 Django 中定期运行一个函数

    我在 Django 中编写一个应用程序来监视一组服务器中的某些服务 我希望定期更新观点 到目前为止 我已经研究过编写自定义管理命令 链接在这里 http docs djangoproject com en dev howto custom
  • 从 pygame 获取 numpy 数组

    我想通过 python 访问我的网络摄像头 不幸的是 由于网络摄像头的原因 openCV 无法工作 Pygame camera 使用以下代码就像魅力一样 from pygame import camera display camera in
  • Python:计算字典的重复值

    我有一本字典如下 dictA unit1 test1 alpha unit1 test2 beta unit2 test1 alpha unit2 test2 gamma unit3 test1 delta unit3 test2 gamm
  • 如何从没有结尾的管道中读取 python 中的 stdin

    当管道来自 打开 时 不知道正确的名称 我无法从 python 中的标准输入或管道读取数据 文件 我有作为例子管道测试 py import sys import time k 0 try for line in sys stdin k k
  • 从 Python 中的类元信息对 __init__ 函数进行类型提示

    我想做的是复制什么SQLAlchemy确实 以其DeclarativeMeta班级 有了这段代码 from sqlalchemy import Column Integer String from sqlalchemy ext declar
  • 在python中,如何仅搜索所选子字符串之前的一个单词

    给定文本文件中的长行列表 我只想返回紧邻其前面的子字符串 例如单词狗 描述狗的单词 例如 假设有这些行包含狗 hotdog big dog is dogged dog spy with my dog brown dogs 在这种情况下 期望
  • 循环标记时出现“ValueError:无法识别的标记样式 -d”

    我正在尝试编码pyplot允许不同标记样式的绘图 这些图是循环生成的 标记是从列表中选取的 为了演示目的 我还提供了一个颜色列表 版本是Python 2 7 9 IPython 3 0 0 matplotlib 1 4 3 这是一个简单的代
  • 您可以在 Python 类型注释中指定方差吗?

    你能发现下面代码中的错误吗 米皮不能 from typing import Dict Any def add items d Dict str Any gt None d foo 5 d Dict str str add items d f
  • 协方差矩阵的对角元素不是 1 pandas/numpy

    我有以下数据框 A B 0 1 5 1 2 6 2 3 7 3 4 8 我想计算协方差 a df iloc 0 values b df iloc 1 values 使用 numpy 作为 cov numpy cov a b I get ar
  • Python:元类属性有时会覆盖类属性?

    下面代码的结果让我感到困惑 class MyClass type property def a self return 1 class MyObject object metaclass MyClass a 2 print MyObject

随机推荐

  • 添加上下文来重写规则

    在下面的代码中 我想重写g f as h如果可能 可能有案例h还没有类的实例 但我想在可能的情况下进行重写 我收到一条错误消息 表明这是可以实现的 但我不确定我到底需要更改什么 这是一些示例代码 LANGUAGE TypeFamilies
  • 当应用程序进入后台时,iOS 外部配件断开连接

    我有一个外部配件 当应用程序进入后台时 它似乎会断开连接 有什么办法可以解决这个问题吗 在您的应用程序 plist 文件中添加以下标志 所需的后台模式 应用程序与配件通信 此解决方案仅适用于 iOS 5 及更高版本
  • 任何人都可以帮助我理解运行 ngserve (Angular 8) 时 cmd 中的这条消息吗?

    当我跑步时ng serve这是输出 我无法理解它的含义 谁能告诉它是否是一个错误 i wds Project is running at http localhost 4200 webpack dev server i wds webpac
  • 获取 iOS 中当前的设备语言?

    我想显示设备用户界面当前使用的语言 我会使用什么代码 我想要这个作为NSString以完全拼写的格式 不是 en US 编辑 对于那些路过的人来说 这里有大量有用的评论 因为答案随着新的 iOS 版本而演变 提供的解决方案实际上将返回设备的
  • C++ 中的类型转换

    我正在使用 C 编程原理与实践 这本书学习 C 两个月 现在我想澄清一些关于我的选角的疑问 当我执行隐式转换时 例如 char c a int b c 这里 c 的值被隐式转换为 int 类型 而不使用任何显式运算符 这算不算选角 或者当我
  • 如何根据一年中的星期计算每月中的星期?

    我找到了一个node js https stackoverflow com questions 33647513 get the week number of the month from week number of the year解决
  • 如何在优先约束编辑器中使用在执行 SQL 任务中创建的变量值?

    I need to run n multiple Execute SQL Task based on n multiple variable value isnull true or false This variable is creat
  • Windows 文件名中的分号

    我的一位用户问为什么我的应用程序不支持文件名中的分号 我单步执行了我的代码 看起来 Windows 功能获取打开文件名截断任何包含分号的文件名 例如 一 二 wav gt 一 微软说不允许使用冒号 但没有提到分号 命名文件 路径和命名空间
  • 使 HTML 内容展开以填充窗口

    我有一个 HTML 页面 垂直分为 Header Body Footer 身体又被水平分为 左侧有一个大 DIV 周围有滚动条 显示图表的一部分 右边有一个表格 页眉和页脚是固定高度的 正文应垂直扩展以填充窗口中未被页眉和页脚占据的部分 同
  • 使用Spring(mvc)进行文件上传和下载

    我对 Spring MVC 很陌生 但对 Java 并不陌生 我正在尝试向数据库上传数据以及从数据库下载数据 我在这个网站上做了类似的事情 使用 spring mvc 文件上传和下载 https gardiary wordpress com
  • 无法使用 urllib2 从网络保存图像

    我想使用 python 保存网站上的一些图像urllib2但是当我运行代码时它会保存其他东西 这是我的代码 user agent Mozilla 4 0 compatible MSIE 5 5 Windows NT headers User
  • 为什么 CUDA 内核中 z 始终为零

    我正在使用 Cudafy 在 NVIDIA GPU 上进行一些计算 Quadro K1100M 功能 3 0 如果重要的话 我的问题是 当我使用以下内容时 cudaGpu Launch new dim3 44 8 num new dim 8
  • 在 Oracle SQL Developer 代码窗口中运行带有变量的 sql 代码

    我正在使用 Oracle SQL Developer 编写代码 我有一个有效的简单选择语句 SELECT CFS CAE SEC ID CFS FM SEC CODE CFS LAST USER ID case when 1 1 then
  • 导出使用 Proguard 的应用程序时出错

    我尝试在我的应用程序中使用 Proguard 我在 proguard cfg 文件中编写了这段代码 optimizationpasses 5 dontusemixedcaseclassnames dontskipnonpubliclibra
  • 删除时 AWS S3 访问被拒绝

    我有一个可以毫无问题地写入的存储桶 但是 当我尝试删除对象时 出现错误 AccessDeniedException in NamespaceExceptionFactory php line 91 遵循非常基本的示例here http do
  • 如何在 Linux 上用 C 检查堆栈和堆的使用情况?

    有没有办法在Linux上检索C中的堆栈和堆使用情况 我想知道堆栈 堆专门占用的内存量 如果您知道进程的 pid 例如 1234 则可以使用pmap 1234命令 打印内存映射 您还可以阅读 proc 1234 maps文件 实际上是一个文本
  • ANSI C 中的复合语句(块)是否被括号表达式包围?

    浏览我找到的 Linux 内核源代码一些代码 http lxr linux no linux v2 6 30 arch x86 include asm uaccess h L332其中括号包围的语句块被视为表达式口齿不清 或ML 即一个表达
  • 为 iPad 进行编译时是否设置了特定的 Xcode 编译器标志?

    为 iPad 进行编译时是否设置了特定的 Xcode 编译器标志 我想有条件地编译 iPad 与 iPhone iPod Touch 代码 例如 ifdef TARGET IPAD code for iPad else code for i
  • Eclipse 3.7 Indigo:“关于对话框”错误

    我最近将 Eclipse 3 6 实例升级到 3 7 我想查看 帮助 gt 关于 Eclipse 选项 但没有显示此对话框 使用 consoleLog debug 选项运行它以了解可能出现的问题 这就是我所看到的 有什么想法吗 顺便说一句
  • 将 ETag / Last-Modified 装饰器与 Django 基于类的通用视图一起使用

    我最近将 Django 项目之一中的所有视图迁移到新的基于类的视图 对于经典的基于函数的 Django 视图 有一个方便的装饰器django views decorators http condition如果存在与您指定的条件匹配的缓存副本