【问题标题】:Avoid repeating lots of queries every time避免每次都重复大量查询
【发布时间】:2018-05-29 17:27:36
【问题描述】:

我已经完成了网站的构建,有很多视图包含很多查询 我的问题是如何避免重复用户多次访问的视图中的某些查询?

这里是views.py的例子

@access_to(['is_admin','is_job_seeker'])
def negotiationView(request,slug,id,code):
    obj = get_object_or_404(Group,slug=slug) 
    nego = get_object_or_404(Negotiation,id=id,code=code)

    related_negos = Negotiation.objects.filter(tag=nego.tag)
    # New tag can be created every 2 months or more
    all_jobs = obj.job_offers.filter(published=True) # new job can be added every week

您可以,每次我访问该页面时,都会重复相同的查询..

任何提示都会有所帮助,提前谢谢!

【问题讨论】:

  • 您通常不能,因为通常认为网络服务器(数据库除外)是无状态的。你可以做一些缓存,例如django-cachalot
  • 感谢@WillemVanOnsem 的快速回复,Django-cachalot 有没有办法告诉它在多少天或几个月后重新加载真实内容而不是缓存。 django 不提供一个,而不是任何第三方包?

标签: django performance django-views django-queryset


【解决方案1】:

您可以为您的应用程序添加一个缓存层。可以与 Django 一起使用的技术之一是 Memcached

以下是 Django 文档中有关使用 Memcached 设置缓存的信息:https://docs.djangoproject.com/en/2.0/topics/cache/#memcached

同样的页面还有关于在 Django 中使用缓存的信息,包括per-view cache

【讨论】:

  • 感谢您的回答,您可以编辑您的答案并举例说明如何在视图中使用它吗?
  • 太棒了。在文档中找到它。同时,等待其他可能更好的答案。非常感谢
  • 我发布的第二个链接per-view cache 指定了一个装饰器,如果您使用基于类的视图,您可以添加到视图或 urlconf 中。
猜你喜欢
  • 2023-03-22
  • 1970-01-01
  • 2020-08-25
  • 2014-10-31
  • 2021-12-16
  • 2019-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多