Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django缓存+Django数据库请求_Django_Django Database_Django Cache_Django Caching - Fatal编程技术网

Django缓存+Django数据库请求

Django缓存+Django数据库请求,django,django-database,django-cache,django-caching,Django,Django Database,Django Cache,Django Caching,我正在构建一个Django web应用程序,它允许用户从计算机系统中选择一张照片,并不断填充到用户的时间线上。时间线最初将显示10张照片,然后点击刷新以获取时间线上的下10张照片 所以我的第一个问题是我能够上传存储在文件系统上的图像,但是我如何只显示前10个,然后刷新以获取下10个,依此类推 接下来,我希望应用程序的用户体验更快。所以,我正在考虑缓存。所以,我在想,我应该缓存什么。因为Django中有3种类型的缓存—数据库缓存、MemCache或文件系统缓存。 所以我的第二个问题是我应该缓存每个

我正在构建一个Django web应用程序,它允许用户从计算机系统中选择一张照片,并不断填充到用户的时间线上。时间线最初将显示10张照片,然后点击刷新以获取时间线上的下10张照片

所以我的第一个问题是我能够上传存储在文件系统上的图像,但是我如何只显示前10个,然后刷新以获取下10个,依此类推

接下来,我希望应用程序的用户体验更快。所以,我正在考虑缓存。所以,我在想,我应该缓存什么。因为Django中有3种类型的缓存—数据库缓存、MemCache或文件系统缓存。 所以我的第二个问题是我应该缓存每个用户的前10张照片还是其他什么

请回答你的建议

所以我的第一个问题是我能够上传存储在文件系统上的图像,但是我如何只显示前10个,然后刷新以获取下10个,依此类推

按照最初的逻辑取前10张,按时间顺序取下下下一张照片。您必须具有与照片发布相关的时间戳。根据这一点获取图像。你可以用Django来做这个

我应该缓存什么

无论您想要经常向用户显示什么样的静态数据,都不会立即更改。您可以为每个用户缓存,也可以为所有用户缓存。根据这一点,您可以选择要缓存的内容

我应该缓存每个用户的前10张照片还是其他什么

这取决于你。这些第一张图片对所有用户都是通用的吗?然后你可以缓存。如果不是,并且图片依赖于用户,那么缓存它们就没有意义了。用户无论如何都必须获取第一个图像。我非常怀疑用户会经常要求同样的前10张照片。再说一遍,这是你的逻辑。如果您认为缓存有帮助,您可以继续缓存。

该项目最初是针对缓存图像的类似问题创建的。它包括两个功能,可以帮助您高效地缓存和服务图像。DiskCache是一个Apache2许可的磁盘和文件备份缓存库,用纯Python编写,与Django兼容

提供与Django兼容的缓存接口,并提供一些额外功能。特别是,get和set方法允许读取和写入文件。例如:

from django.core.cache import cache

with open('filename.jpg', 'rb') as reader:
    cache.set('filename.jpg', reader, read=True)
稍后,您可以获取对该文件的引用:

reader = cache.get('filename.jpg', read=True)
如果您只是想要缓存中磁盘上的文件名:

try:
    with cache.get('filename.jpg', read=True) as reader:
        filename = reader.name
except AttributeError:
    filename = None
上面的代码从缓存中请求一个文件。如果没有这样的值,它将返回None。None将导致with语句引发异常,因为它缺少_exit__)方法。在这种情况下,将捕获异常并将filename设置为None


对于文件名,您可以使用类似于告诉Nginx直接从磁盘提供文件的功能。

关于缓存部分的详细指南,但我有一个获取接下来10幅图像的查询。我在views.py文件documents=Document.objects.filterowner=request.user[页码:页码+5]中有此语句。页面号最初从0开始。我有一个下一步按钮在我的模板,这将获取我接下来的10张照片。因此,我考虑使用jQuery+AJAX。那么,我将如何通过jQuery发送数据,说明应该显示哪一组图片,即11-20、21-30或31-40等等。您也可以使用Django自己的Paginator