django动态文件服务优化

时间:2011-12-15 02:42:10

标签: python django apache

我正在开发一个django项目,它提供了一个API来生成图像的缩略图,基本逻辑如下:

  1. 当源图像URL第一次出现时,django会进行某种图像处理,并返回缩略图

  2. 当同一图像网址再次出现时,django会再次提供上一个缩略图(存储为静态媒体)。

  3. 基本上,案例2的发生频率远远超过案例1.现在我使用django一直服务于图像,我认为这是一种不好的做法。

    我想知道是否有可能为案例2提供更好的图像处理方式?例如,是否有某种方法可以让django向apache发送代理请求并请求apache提供该文件?

    我知道我可以使用HTTP重定向来实现这一点,但这似乎在客户端生成了太多的重定向请求(一个HTML页面将包含许多指向此API的链接)。

    THX。

3 个答案:

答案 0 :(得分:2)

最简单的解决方案是使用带有条件的Apache重写规则。

RewriteCond %(REQUEST_URI) ^media
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule #Some rewrite rule to redirect from '/media/filename' to '/image_generator/filename'

这基本上只是检查文件是否存在于媒体目录中,如果不存在,它会将用户发送到图像生成器,然后生成图像生成器并将文件保存到/ media,可以找到它下一个请求。

注意:我从未尝试过使用Django进行这种重定向,因此可能需要进行一些调整..

答案 1 :(得分:0)

  

例如,是否有某种方法可以让django向apache发送代理请求并请求apache提供该文件?

你完全倒退了。

阅读Django部署指南。 https://docs.djangoproject.com/en/1.3/howto/deployment/modwsgi/#serving-files

Apache应该始终提供所有静态文件(例如图像)。总是。

Django永远不应该提供图像文件(或.css或.js或.html以外的任何内容)。

答案 2 :(得分:0)

请参阅文档中本节的后面部分:

http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines#The_Apache_Alias_Directive

使用Alias / AddHandler / mod_rewrite允许Django覆盖文件系统中的静态文件。换句话说,静态文件优先。