2017-06-23 5 views
2

Flaskでインスタンス変数を使用する正しい方法は、ユーザーとセッションを追加することですが、コンセプトをテストしようとしています。そのすべてを実行したくありませんただまだ。私は、Webアプリケーションが画像に異なる画像操作を実行できる変数に画像を読み込ませようとしています。明らかに、新しい要求ごとに画像上で操作のリストを実行し続ける必要はないので、ひどく非効率です。Flaskアプリケーションのメモリ内データ

Flaskにapp.varという別のルートからアクセスできる方法はありますか?私はグローバルな文脈とFlaskのcurrent_appを使ってみましたが、私は彼らのためではない印象を受けます。

私の青写真のためのコードは次のとおりです。

import os 
from flask import Flask, url_for, render_template, \ 
    g, send_file, Blueprint 
from io import BytesIO 
from PIL import Image, ImageDraw, ImageOps 

home = Blueprint('home', __name__) 

@home.before_request 
def before_request(): 
    g.img = None 
    g.user = None 

@home.route('/') 
def index(): 
    return render_template('home/index.html') 

@home.route('/image') 
def image(): 
    if g.img is None: 
     root = os.path.dirname(os.path.abspath(__file__)) 
     filename = os.path.join(root, '../static/images/lena.jpg') 
     g.img = Image.open(filename) 
    img_bytes = BytesIO() 
    g.img.save(img_bytes, 'jpeg') 
    img_bytes.seek(0) 
    return send_file(img_bytes, mimetype='image/jpg') 

@home.route('/grayscale', methods=['POST']) 
def grayscale(): 
    if g.img: 
     print('POST grayscale request') 
     g.img = ImageOps.grayscale(img) 
     return "Grayscale operation successful" 
    else: 
     print('Grayscale called with no image loaded') 
     return "Grayscale operation failed" 

/imageルートが正しくイメージを返しますが、私は、/grayscaleを呼び出すことができるようにしたい操作を行うと、に別の電話をかけることができるだろう/imageを読み込み、イメージを読み込まずにメモリから戻します。

+0

いくつかのコードは、あなたが何をしているかを完全に理解するのに役立ちます。 – MrLeeh

+0

が追加されました。私は遅れて質問を電話から投稿し、仕事に出たときに更新するのを忘れてしまった。 – geoffjay

答えて

1

セッション変数にキーを保存し、それを使用してグローバル辞書の画像を識別することができます。ただし、複数のFlaskアプリケーションインスタンスを使用すると、この問題が発生する可能性があります。しかし、1つあればそれはいいでしょう。それ以外の場合は、複数のワーカーを扱うときにRedisを使用できます。私は次のコードを試していないが、それは概念を示す必要があります。

+0

残念ながら、それはそれをしません、私は 'キーがNone'である応答を取得します。私はFlask-IIIFを見つけましたが、現在私が望むもののように聞こえる 'ImageSimpleCache'を実装する方法を理解しようとしています。 – geoffjay

+0

私は忘れました。これを行うには、 'app.config ['SECRET_KEY'] = 'あなたの秘密鍵'を実行して秘密鍵を設定する必要があります。 – MrLeeh

+0

最後に、UUIDで試してみる機会がありましたが、今は私が得ることができる必要があるようです。ありがとう! – geoffjay

関連する問題