Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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
Python django动态文件服务优化_Python_Django_Apache - Fatal编程技术网

Python django动态文件服务优化

Python django动态文件服务优化,python,django,apache,Python,Django,Apache,我正在从事一个django项目,该项目提供了一个API来生成图像的缩略图,其基本逻辑如下所示: 当源图像URL第一次出现时,django将执行某种图像处理,并返回缩略图 当相同的图像URL再次出现时,django只需再次提供以前的缩略图(存储为静态媒体) 基本上,案例2比案例1发生得更频繁。现在我一直使用django来提供图像,我认为这是一种不好的做法 我想知道是否有可能为案例2提供更好的图像服务?例如,是否有某种方式要求django向apache发送代理请求并要求apache提供文件服务 我知

我正在从事一个django项目,该项目提供了一个API来生成图像的缩略图,其基本逻辑如下所示:

  • 当源图像URL第一次出现时,django将执行某种图像处理,并返回缩略图

  • 当相同的图像URL再次出现时,django只需再次提供以前的缩略图(存储为静态媒体)

  • 基本上,案例2比案例1发生得更频繁。现在我一直使用django来提供图像,我认为这是一种不好的做法

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

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

    thx

    例如,是否有某种方式要求django向apache发送代理请求并要求apache提供文件服务

    你把它完全倒过来了

    阅读Django部署指南

    Apache应该一直为所有静态文件(例如图像)提供服务。总是


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

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

    RewriteCond %(REQUEST_URI) ^media
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule #Some rewrite rule to redirect from '/media/filename' to '/image_generator/filename'
    
    这基本上只是检查文件是否存在于媒体目录中,如果不存在,则将用户发送到图像生成器,然后图像生成器可以生成文件并将其保存到/media,以便下一次请求时可以在其中找到该文件


    注意:我从来没有用Django尝试过这种重定向,因此可能需要一些调整。

    请参阅本节后面的文档:


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

    @SLott,有时您需要创建动态资源。例如,@FakeRainBrigand:正确。您必须在媒体目录中创建一个文件,然后在处理响应的正常过程中由Apache提供服务。您不希望Django线程浪费时间等待(缓慢的)字节流到达客户端桌面。您希望Apache(和缓存)在Django之外处理这个问题。是的,我知道这不是一个好做法。但是在所描述的情况下,缩略图在第一次调用完成之前并不存在,那么我应该如何在apache中描述它呢?@Walty:你不会“向apache描述它”。Django view函数只是在Apache已经提供服务的媒体目录中创建文件。发送HTML页面后,浏览器请求Apache发送的图像。不是Django。谢谢您的提示,我检查了,但是这需要我将完整的本地映像路径传递到URL,对吗?REQUEST_FILENAME变量应该包含系统上文件的路径,由Apache从URI解析。因此,不需要通过URI传递任何本地路径。这里有一些注意事项,在您链接到的Apache文档中有描述,但我非常确定它应该在这种情况下工作。谢谢,我想这会工作,但我可能需要更改URL结构。只是一些更新,我发现下面的链接也非常有用:最终我通过集成这个答案和URL解决了这个问题