3

現在、Flask を使用してビジュアル プログラミング環境を提供しています。ユーザーが後で戻ってきた場合に、現在システムにあるコードをロードできるようにしたいと考えています。私は使用してみました:

return redirect(url_for('static', filename='rawxml.txt'))
return redirect(send_from_directory('static', 'rawxml.txt'))

ただし、どちらもファイルの変更されたバージョンを提供することはなく、代わりにファイルのキャッシュされたバージョンと思われるものを提供します。新しいコンテンツで頻繁に書き換えられるファイルを提供するにはどうすればよいですか?

注: rawxml.txt は「静的」ディレクトリに保存されますが、実際の XML がある場所へのシンボリック リンクです (ハード リンクも試しました)。

4

2 に答える 2

3

静的ファイルの次の実装があります。

hash_cache = {}

@app.url_defaults
def add_hash_for_static_files(endpoint, values):
    '''Add content hash argument for url to make url unique.
    It's have sense for updates to avoid caches.
    '''
    if endpoint != 'static':
        return
    filename = values['filename']
    if filename in hash_cache:
        values['hash'] = hash_cache[filename]
        return
    filepath = safe_join(app.static_folder, filename)
    if os.path.isfile(filepath):
        with open(filepath, 'rb') as static_file:
            filehash = get_hash(static_file.read(), 8)
            values['hash'] = hash_cache[filename] = filehash

で生成された URL にハッシュ引数を追加するだけurl_forです。

于 2013-08-07T05:27:28.777 に答える
1

未テスト:

url = url_for('static', filename='rawxml.txt', t=time.time())
return redirect(url)

コンテンツがそれほど動的でない場合は、ファイルの MD5 ハッシュを使用するように書き直すことができます。この方法では、ファイルが変更されたときにのみキャッシュを無効にします。tbicrからの回答は、この良い例のように見えます。

[アップデート]

jQuery 側で、次のようにします。

$('#some_selector').load('{{ url }}#'+new Date().valueOf());
于 2013-08-07T00:37:42.593 に答える