如何在视图中使用Django缓存而不缓存所有页面

2024-03-09

我尝试使用 Django Cache 来改善我的观点。效果很好,400 毫秒到 8 毫秒是完美的。但是当用户第一次访问页面时,Django 会在标题中缓存包含用户信息的页面,当我尝试注销时,页面会继续包含用户信息。

我也尝试在模板中使用缓存,但效果不好,我的问题来自视图,所以继续 400ms。

My 设置.py

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
        'LOCATION': 'unique-snowflake',
    }
}

My view.py

@cache_page(60 * 15)
def list(request, tag_slug=None):
    page = request.GET.get('page')
    data = questions_controller.list_questions(request, tag_slug, None, page)
    if data:
        return render(request, 'questions/list.html', data)
    return page_not_found(request, "Page not found")

我遇到了同样的问题per-view https://docs.djangoproject.com/en/1.11/topics/cache/#the-per-view-cache缓存。第一个缓存用户的用户信息向所有用户显示。而且我不能使用模板缓存 https://docs.djangoproject.com/en/1.11/topics/cache/#template-fragment-caching因为它很慢。

最好的方法是使用缓存视图的最终结果低级缓存API https://docs.djangoproject.com/en/1.11/topics/cache/#the-low-level-cache-api。如果数据是动态的,则使用Django 信号 https://docs.djangoproject.com/en/1.11/topics/signals/#module-django.dispatch清除陈旧的缓存数据。根据您的要求调整以下代码。

Views:

from django.core.cache import cache    
def sample(request):
        cached_data = cache.get_many(['query1', 'query2'])
        if cached_data:
            return render(request, 'sample.html', {'query1': cached_data['query1'], 'query2': cached_data['query2']})
        else:
            queryset1 = Model.objects.all()
            queryset2 = Model2.objects.all()
            cache.set_many({'query1': queryset1 , 'query2': queryset2 }, None)
            return render(request, 'sample.html', {'query1': queryset1 , 'query2': queryset2})

Models:

from django.db.models.signals import post_save
from django.core.cache import cache

@receiver(post_save, sender=Model1)
@receiver(post_save, sender=Model2)
def purge_cache(instance, **kwargs):
    cache.delete_many(['query1', 'query2'])

希望这可以帮助。

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

如何在视图中使用Django缓存而不缓存所有页面 的相关文章

随机推荐

  • 使用反应本机元素更改主题不起作用?

    我一直在使用 React Native 元素 我想为我的应用程序实现黑暗模式 但由于某种原因我无法获取主题道具
  • 如何从命令行更新项目中的单个 nuget 包?

    我正在尝试更新具有多个依赖项的 csproj 中的单个包 也就是说 packages config 文件如下所示
  • 如何更改 SQLite 数据库列中的值?

    我有一个具有以下格式的 SQLite 数据库 TABLE users name text avatar text password text userdir text role numeric 我想更改数量role 我怎样才能改变它 我的意
  • IntelliJ 中的 Intellisense 不再工作

    我目前正在运行 IntelliJ IDEA 13 1 运行 IntelliJ 13 时 智能感知 自动完成停止工作 我尝试升级 但仍然不起作用 我可以使用显式调用代码完成ctrl space 我看了进去设置 gt 编辑器 gt 代码完成看起
  • 测试容器;在 docker 内运行 @Testcontainers 测试 [在 Docker 内运行 Docker]

    如何跑步 Testcontainers基于 docker 容器内的测试用例 我有一个简单的 Spring Boot 应用程序 它具有集成测试 组件级别 可以使用以下命令与容器进行交互Testcontainers 测试用例从外部容器 本地机器
  • 处理按键事件时 NSTextField 泄漏

    我是这个论坛的新手 我已经搜索过 但没有找到这个问题的任何答案 这个问题在本周的大部分时间里一直困扰着我 每次按下按键时 NSTextField 都会导致内存泄漏 我已将这个问题从我的代码中分离出来 并且可以按如下方式重现 创建一个新的 C
  • 如何禁用 UIWebview 水平滚动?

    我尝试通过插入来禁用它 到我的 HTML 字符串中 以及上面的十几个变体 徒劳地希望我只是搞砸了标签语法 但似乎没有什么可以阻止 UIWebView 水平滚动 然而 有些应用程序可以做到这一点 例如 MobileRSS 并且可能由于它们没有
  • iOS上删除大文件文件夹的性能

    假设我的 iOS 应用程序的数据目录中有一个文件夹 其中包含数千个小文件 删除此文件夹 通过 NSFileManager removeItemAtPath 需要相当长的时间 但在 OS X 上 删除具有相同内容的文件夹非常快 它似乎只是从文
  • Java 项目的包结构?

    在 Java Web 应用程序中设置包结构的最佳实践是什么 您将如何设置您的 src 单元测试代码等 你可以关注maven的标准项目布局 http maven apache org guides introduction introduct
  • shell中实时去除回车

    对于上下文 我尝试创建一个 shell 脚本来简化 ffmpeg 的实时控制台输出 仅显示正在编码的当前帧 我的最终目标是在某种进度指示器中使用此信息进行批处理 对于那些不熟悉 ffmpeg 输出的人来说 它将编码的视频信息输出到 stdo
  • pandas 对布尔类型应用过滤器

    这些是我的 DataFrame 的类型 count int64 word object cat1 bool cat2 object cat3 bool dtype object 如何对 cat1 和 cat2 中的布尔值进行过滤 就像是 d
  • 如何在 C# 中使用可选参数?

    Note This question was asked at a time when C did not yet support optional parameters i e before C 4 我们正在构建一个从 C 类以编程方式生
  • 如何检索 git 中两次提交之间更改的 maven 模块列表

    我有一个带有主模块和多个子模块的 Maven 项目 我想知道是否有一种简单的方法来检索两次提交之间更改的所有模块 无论如何 在问题提出近三年后 我基于 git diff 的启发式设计 基于 Maven 工件受惯例支配的事实 提取所有文件更改
  • 从 CursorAdapter.get() 返回对象

    我正在重写 CursorAdapter 我需要获取最后一项 问题是 CursorAdapter 实际上有一个 get 方法 但源是一个数据库 它返回一个普通对象 我什至不知道它是什么 我希望它返回一个 Cursor 对象 尽管如此 我怎样才
  • Android studio logcat最大行数

    我正在使用连接到 Android Studio 的真实设备进行测试 由于我不想中断多线程行为 因此我在代码中添加了大量日志语句以了解发生了什么 在 logcat 中 我看到了即将到来的语句 到目前为止一切顺利 运行完整测试后 我发现我的日志
  • 我应该从 MVC 框架中的控制器或模型中调用 redirect() 吗?

    我正在使用 MVC PHP 框架 Codeigniter 并且我有一个直接的问题 即从哪里调用redirect 控制器还是模型 设想 用户导航到 www example com item 555 在我的模型中 我在项目数据库中搜索 ID 为
  • 如何在使用 Moq 的测试中引发事件?

    以下是父类中的部分代码实现 handler FooUpdateDelegate FooUpdate OnFooUpdate protected abstract void OnFooUpdate ref IBoo boo string s
  • 如何在解决方案级别使用 Microsoft.Net.Compilers?

    我想开始使用Microsoft Net Compilers https www nuget org packages Microsoft Net Compilers 简化我们的构建服务器的工作 但是 我只能让它在每个项目级别 https s
  • 木偶如何判断变量是否已设置

    在木偶类中 我应该如何测试变量是否已设置 现在我只是检查变量是否未定义 if http port undef run command run command http port http port 有没有更好的方法来检查变量是否已声明 如果
  • 如何在视图中使用Django缓存而不缓存所有页面

    我尝试使用 Django Cache 来改善我的观点 效果很好 400 毫秒到 8 毫秒是完美的 但是当用户第一次访问页面时 Django 会在标题中缓存包含用户信息的页面 当我尝试注销时 页面会继续包含用户信息 我也尝试在模板中使用缓存