2016-10-14 5 views
0

私は広い視点から私の頭の中でこれを理解することにも苦労していますが、私ができる限り最善のものを説明しようとします。詳細はお問い合わせください。Flask(Python)を使用してビュー内で複数の値を返す

今私は自分の職場の内部APIからユーザー名とそのユーザーIDを取得し、各ワーカーのユーザー名に結びつけられたpython関数を持っています。 。 (私はそれが主キーと見なされることができると思い、データを取得する主な方法として、ユーザー名を使用?)

@app.route('/user/<username>') 
def issue(username) 

    json = get_json(username) 

    _user = get_username(json) 
    _id = get_id(json) 

    print "User: " + _user 
    print "ID: " + _id 

get_username()get_id()関数はJSONファイルを解析し、私は必要なデータを取得します)

ユーザーがこのページにアクセスする方法は、webappのメインページにあります。テキストフィールドがあり、ユーザー名を入力してから127.0.0.1:5000/user/usernameページにリダイレクトします。上記の関数を呼び出します。

これは、ユーザー名とIDだけの非常に単純なWebページを提供します。しかし、どのようにして複数の名前とIDを1回のリクエストでレンダリングできますか?例えばので

1. User goes to home page 
2. User enters "John Doe, Harry Smith, Alex Boggs" into the text box and hit submit 
3. They are then presented with this information 

User: John Doe 
ID: 127 

User: Harry Smith 
ID: 412 

User: Alex Boggs 
ID: 322 

は、私も私だけは本当に一度に一つの引数を渡す方法を知っているように、これを実行するために開始するところは本当にわかりません。

注:理想的には、データは実際にはURLに関連付けられず、代わりにホームページの検索ボックスの下に生成されますが、解決策は決まります。ユーザーがテキストボックスにJohn Doe, Harry Smith, Alex Boggsに入ると

答えて

1

あなたはフラスコ内のJohn Doe, Harry Smith, Alex Boggsを取得する必要があり、あなたはそれ"John Doe, Harry Smith, Alex Boggs".split(", ")は、名前のリストを取得するために分割する必要があります。

今度はforループを使用して、すべての名前にUser、IDを出力できます。

0

使用「パス」この@app.route('/something/<path:name_list>') ようなコンバータだから、ときに、ユーザーのリクエストURL:site/something/name1/name2/name3 は、名前のリスト

を取得しますまたはコンバータクラスを作成することにより、独自のコンバータを作成することができます。

from werkzeug.routing import BaseConverter 
class ListConverter(BaseConverter): 
    def to_python(self, data): 
     return data.split(',') 

    def to_url(self, data) 
     ','.join([BaseConverter.to_url(each) for each in data]) 

次に、このようなアプリケーションの変換辞書にこのコンバーターを追加します。

app.url_map.converters['list']=ListConverter 

今、あなたがその機能を実装するためにあなたのリストコンバータを使用することができます。

app.route('/something/<list:name_list>') 

、ユーザーがURLを要求することができますlike:site/something/name1,name2,name3

関連する問題