2016-07-05 22 views
3

私は非常に小さな1ページ動的ウェブサイトを構築するためにFlaskを使用しています。クラスを使わずに関数間で変数とその値のリストを共有したい。フラスコビュー関数でデータを共有

FlaskのViewクラスを調べましたが、Flaskを使用しているクラスベースのバージョンを実装するのに十分な大きさでも複雑でもないようです。私が正しく言うなら、私はまた、routeデコレータを使用する能力を失い、代理機能add_url_ruleを使用する必要があります。また、このような何かに私のコードをリファクタリングするために私を強制する

from flask.views import View 
class ShowUsers(View): 

def dispatch_request(self): 
    users = User.query.all() 
    return render_template('users.html', objects=users) 

app.add_url_rule('/users/', view_func=ShowUsers.as_view('show_users')) 

は、変数の共有のために私は2つの技術を考えました。

  1. x = "" 
    
    def foo(): 
        global x 
        x = request.form["fizz"] 
    
    def bar(): 
        # do something with x (readable) 
        print(x) 
    
    def baz(): 
        return someMadeupFunction(x) 
    
  2. def foo(): 
        x = request.form["fizz"] 
        qux(someValue) 
    
    def qux(i): 
        menu = { 
        key0: bar, 
        key1: baz, 
        } 
        menu[i](x) 
    
    def bar(x): 
        # do something with x (readable) 
        print(x) 
    
    def baz(x): 
        return someMadeupFunction(x) 
    
+3

別名:クラスの使用を検討する前にプロジェクトを「大規模」または「複雑」にする必要はありません。 – Hurkyl

+0

しかし、これはFlask APIを使った私の最初のプロジェクトですが、私は自分自身を教えています。私はこれを将来のクラスベースに変換することを、学習の練習として期待しています。 – Joseph

答えて

5

私は、あなたが探していることはapplication local gであると考えています。文書によると

あなたが欲しいものは何でもこの上に保管してください。

これはあなたのニーズを正確に満たしています。

from flask import g 

def foo(): 
    g.x = request.form["fizz"] 

def bar(): 
    # do something with x (readable) 
    print(g.x) 

def baz(): 
    return someMadeupFunction(g.x) 
関連する問題