2017-09-30 14 views
1

私はフラスコの初心者です - Python。私は複数のルーティングに関する問題に直面しています。私はGoogleの検索を行った。しかし、それを実装する方法の完全なアイデアは得られませんでした。 私は異なるURLに対して同じビュー関数を再利用する必要があるフラスコアプリケーションを開発しました。フラスコ内の複数経路指定 - Python

@app.route('/test/contr',methods=["POST", "GET"],contr=None) 
@app.route('/test/primary', methods=["POST", "GET"]) 
def test(contr):           
    if request.method == "POST": 
     if contr is None: 
      print "inter" 
     else: 
      main_title = "POST PHASE" 
... 

私は&は、他のすべてのが同じであることを除いて、いくつかの機能の異なるを持っています。2ルーティングのためにテスト関数を呼び出したいです。だから私は再利用しています。しかし、このテスト関数への呼び出しをリダイレクトする関数から渡されるいくつかのパラメータを使って、テスト関数内のルーティングを区別する方法を知りません。

私はあなたがルートでこれを扱うことができるいくつかの方法がありますスクラッチ

+0

2つのルートに2つのルート関数を使用するだけではどうですか?それらの間で共有したいロジックは、両方とも呼び出す3番目の機能に入れることができます。 –

+0

ダニエル、私はすでにそのようなルートを作成しています。コードを再利用することを考えました。アプリケーションに20ページある場合は、20ルート関数を作成する必要がありますか?フラスコには何かがあるはずです。 –

答えて

3

から複数のルーティングの基本を定義する良いチュートリアルを見つけることができませんでした。

requestオブジェクトを調べると、どのルールがビュー機能の呼び出しをトリガーしたかを知ることができます。

  • request.url_ruleはそのまま、あなたに@app.routeデコレータに 最初の引数として与えられたルールを提供します。これにより には<variable>で指定されたルートの可変部分が含まれます。
  • ビュー 関数の名前にデフォルトは、しかし、それは明示的@app.routeendpoint 引数を使用して設定することができます使用request.endpoint。これは、完全なルール文字列ではなく短い 文字列になる可能性があり、ビュー機能を更新することなくルールを変更できるため、これを好むでしょう。ここで

は例です:

from flask import Flask, request 

app = Flask(__name__) 

@app.route('/test/contr/', endpoint='contr', methods=["POST", "GET"]) 
@app.route('/test/primary/', endpoint='primary', methods=["POST", "GET"]) 
def test(): 
    if request.endpoint == 'contr': 
     msg = 'View function test() called from "contr" route' 
    elif request.endpoint == 'primary': 
     msg = 'View function test() called from "primary" route' 
    else: 
     msg = 'View function test() called unexpectedly' 

    return msg 

app.run() 

もう一つの方法は、@app.routedefaults辞書を渡すことです。辞書はキーワード引数としてビュー関数に渡されます:

@app.route('/test/contr/', default={'route': 'contr'}, methods=["POST", "GET"]) 
@app.route('/test/primary/', default={'route': 'primary'}, methods=["POST", "GET"]) 

def test(**kwargs): 
    return 'View function test() called with route {}'.format(kwargs.get('route')) 
+0

ありがとうございました。あなたは私の一日を救った...これは私が探していたものです。 –

+0

@Priyavv:http://flask.pocoo.org/docs/0.12/api/#url-route-registrationsとhttp://priyavvの情報があります。 /flask.pocoo.org/docs/0.12/api/#incoming-request-data – mhawke

関連する問題