2017-08-09 2 views
1

ここにはFlaskに関するいくつかの質問がありましたが、私の問題に対処したものはありません。画像を作成して保存してから表示するアプリがあります。一度。それは複数回(イメージが変更されるたびに新しいイメージをロードすべきです)にこれを行うべきです(SHOULD)。それはしません。表示されたファイル名に関連付けられた最初のイメージのみが表示されます。これらのファイルは、スタティックフォルダにはなく、アプリに表示されます。Python Flaskイメージを更新していません

画像を介して静的フォルダのサブフォルダに保存され、作成された:

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

アプリ負荷それスルー:

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

(コード操作を通してフラスコアプリケーションに追加されます) 。

問題画像にテキストが表示される(テキストが追加される前にコードの繰り返しが数回削除された)ケースと、アルファチャンネルが間違った場所にあるケース(RGBA→ARGBの問題、私はサイト上の新しいファイルを見ることができないことを除いて、解決された)。現時点では、ローカルでのみ実行/テストしています。正しい画像は~\source\static\images\charactersに表示されます。 * .pyファイルはすべてソースにあります。これを解決するために何をする必要がありますか?

私が試した:私のapp.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 

、また追加してみました:

app.config["CACHE_TYPE"] = "null" 

呼び出すapp.route()の先頭にイメージを作成するページ。

可能性のある別のノートでは、画像はテーブル内にあるはずですが、そうでないように見えます。つまり、ヘッダーを含むテーブルがあり、次にテーブルが1つの列にあり、 ...しかし、最初の列のテキストは、イメージの下にあります(ただし、それぞれ適切な場所にあります)。奇妙ですが、おそらく無関係です。

なぜ、フラスコは正しく更新されないのですか?どのように強制するのですか? (問題を解決するには、プログラムを終了してから再度開いてください。

UPDATE: このが動作するに見えた...

Using Flask, how do I modify the Cache-Control header for ALL output?

を追加することによって、それをやった:

app = Flask(__name__) 
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 1 

をトップへ(にアプリ=フラスコ部分を含ま他のnewbsを助けてください)そしてこれが最後です:

# 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 

ただ1つのインスタンスで動作していましたが、それ以外にも奇妙なキャッシングがありました。以前はキャッシュされていて、もう1つはタイムアウトしていたかもしれませんが、サーバー(ローカルホスト)を閉じたままにしておかなければなりません。

答えて

0

イメージ名を変更して、再生するたびに新しいイメージのように見せかけるようにしてください。ファイル名のいくつかの時間ベースの接尾辞を使用することができます。または、画像のURLを変更して、偽のgetパラメータを追加することもできます。

参考: flask cache busting

flask cache busting library

1

これは

Using Flask, how do I modify the Cache-Control header for ALL output?

を動作するように見えたが追加することでそれをやった:

app = Flask(__name__) 
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0 

をトップへ(税込他のnewbsを支援するためのアプリ=フラスコ部分をuded)と終わりに、この:

# 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 

これは動作しますが、私のコマンドプロンプトウィンドウにログが常に情報を送信しています。

関連する問題