我正在开发一个django项目,它提供了一个API来生成图像的缩略图,基本逻辑如下:
当源图像URL第一次出现时,django会进行某种图像处理,并返回缩略图
当同一图像网址再次出现时,django会再次提供上一个缩略图(存储为静态媒体)。
我想知道是否有可能为案例2提供更好的图像处理方式?例如,是否有某种方法可以让django向apache发送代理请求并请求apache提供该文件?
我知道我可以使用HTTP重定向来实现这一点,但这似乎在客户端生成了太多的重定向请求(一个HTML页面将包含许多指向此API的链接)。
THX。
答案 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覆盖文件系统中的静态文件。换句话说,静态文件优先。