为Django应用程序

时间:2015-12-08 02:28:19

标签: python django

我有一个带搜索页面的应用。用户将能够搜索到几个表。但是,我担心这会给服务器带来巨大的成本。

ads_list = advertisements.filter(Q(title__icontains=words) | Q(street_name__icontains=words) |
                                                 Q(city__in=city.filter(Q(name__icontains=words) | Q(related_names__icontains=words) | Q(post_code=words) | Q(region__icontains=words))) |
                                                 Q(state_category__in=state_category.filter(Q(category_name__icontains=words) | Q(search_tags__icontains=words))) |
                                                 Q(advertisement_type__in=advertisement_type.filter(Q(type_name__icontains=words) | Q(search_tags__icontains=words))))

在搜索页面中,我使用digg_paginator来传播结果。

我的问题是:这些结果是由Django缓存还是每次用户点击"下一页"按钮是否有新查询? 我想知道我是否应该实施Django cache API并尝试自己处理它,但我不知道Django是否已经做得比我更好。 我还会尝试为每个页面提供更多更好的结果,这样用户就不会经常更改页面。

1 个答案:

答案 0 :(得分:1)

are these results cached by Django or every time the user hits the "next page" button a new query is made?

这取决于如何处理按钮按下。如果按下按钮调用Django视图并且您依赖于Django的分页器,Django将在每次按下按钮时查询您的数据库。

如果你想减少对数据库的查询,我可以想到两种方法:

  1. 在客户端使用javascript处理分页。按下按钮会调用Django视图,该视图会将完整的结果集返回给客户端。然后,客户端将使用javascript将结果拆分为多个页面,并通过分页提供对所述页面的访问。

  2. 使用Django的缓存框架。您可以设置Redis服务器并配置Django以将其用于缓存。然后更新您的视图以使用cache_page装饰器。在此处详细了解:https://docs.djangoproject.com/en/1.9/topics/cache/