Python Flask不更新图像

Dar*_*ota 5 html python image flask

这里有一些关于图片的Flask问题,但是没有一个解决我的问题。我有一个创建图像的应用程序,将其保存,然后显示它。一旦。它应该多次执行此操作(每次更改图像时,都应加载新图像)。它不是; 它仅显示与其显示的文件名关联的第一张图像。这些文件不再位于静态文件夹中,而是显示在应用程序中。

通过以下方式创建图像并将其保存到静态文件夹的子文件夹中:

img.save('../source/static/images/characters/{}.png'
              .format(self.char.name), "PNG")
Run Code Online (Sandbox Code Playgroud)

该应用通过以下方式加载:

'<img src="/static/images/characters/{}.png" '
            .format(self.name) +
            ' alt="{}" title="{}" '.format(self.name, self.name) +
            'width=100% />'
Run Code Online (Sandbox Code Playgroud)

(通过代码操作将其添加到flask应用程序)。

问题是我有两个测试用例:一个是文本出现在图像上(添加的文本在代码的一些迭代之前被删除),另一个是alpha通道在错误的位置(RGBA-> ARGB问题,已解决,除了我在网站上看不到新文件)。截至目前,仅在本地运行/测试。适当的图片出现在中 ~\source\static\images\characters。所有* .py文件都在源代码中。为了解决这个问题,我需要做什么?

我试过了:

@app.after_request
def add_header(response):
"""
Add headers to both force latest IE rendering engine or Chrome Frame,
and also to cache the rendered page for 10 minutes.
"""
response.headers['X-UA-Compatible'] = 'IE=Edge,chrome=1'
response.headers['Cache-Control'] = 'public, max-age=0'
return response
Run Code Online (Sandbox Code Playgroud)

作为app.py文件末尾的单独代码,还尝试添加:

app.config["CACHE_TYPE"] = "null"
Run Code Online (Sandbox Code Playgroud)

到的开头app.route()会调用创建图片的页面。

在一个可能的单独注释上,图像应该在表格中,但似乎不是。。。我的意思是,有一个带标题的表格,然后是一个列中的表格,另一个是图像中的...但是第一列的文字在图片下方(尽管每个文字均位于其适当位置)。奇怪,但可能无关。

那么,为什么烧瓶无法正确更新,我如何强制这样做呢?(关闭程序并重新打开程序时问题仍然存在)。

更新:似乎起作用...

使用Flask,如何修改ALL输出的Cache-Control标头?

通过添加:

app = Flask(__name__)
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 1
Run Code Online (Sandbox Code Playgroud)

在顶部(包括用于帮助其他新手的app = Flask部分),最后是:

# No caching at all for API endpoints.
@app.after_request
def add_header(response):
    # response.cache_control.no_store = True
    if 'Cache-Control' not in response.headers:
        response.headers['Cache-Control'] = 'no-store'
    return response
Run Code Online (Sandbox Code Playgroud)

但是仅适用于单个实例,其他实例仍然具有怪异的缓存。可以从以前缓存,而另一个缓存刚刚超时,但是由于我一直关闭服务器(localhost),所以不会发生这种情况,对吗?

Dar*_*ota 5

这似乎有效

使用Flask,如何修改ALL输出的Cache-Control标头?

通过添加:

app = Flask(__name__)
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0
Run Code Online (Sandbox Code Playgroud)

在顶部(包括用于帮助其他新手的app = Flask部分),最后是:

# No caching at all for API endpoints.
@app.after_request
def add_header(response):
    # response.cache_control.no_store = True
    response.headers['Cache-Control'] = 'no-store, no-cache, must-
    revalidate, post-check=0, pre-check=0, max-age=0'
    response.headers['Pragma'] = 'no-cache'
    response.headers['Expires'] = '-1'
    return response
Run Code Online (Sandbox Code Playgroud)

这可行,但是命令提示符窗口中的日志不断发送信息。


小智 2

尝试更改图像名称,这样每次重新生成它时它都会假装是一个新图像。您可以使用一些基于时间的文件名后缀。或者您可以更改图像的 url,添加一些假的 get 参数。

参考: flask 缓存清除

Flask 缓存清除库