2017-09-16 1 views
0

Flaskの青写真が実際にページを生成するときにのみ、Flaskエンドポイント(URLページアドレスの終わり)に固有のUUIDを生成する方法はありますか?Flaskエンドポイント用のUUIDをページロード時またはJinjaメソッド呼び出しで生成する

次フラスコ青写真コードは私のために仕事を行います。

@street_report_blueprint.route('/', methods=['POST', 'GET']) 
def get_streetreport(reportid=uuid.uuid4().hex): 
    mainselection = request.form['MainlistRadios'] 
    return render_template('street_reports/street_report.jinja2', mainselection=mainselection, reportid=reportid) 

reportidをここフラスコ法のパラメータにデフォルトのUUID値として生成され、Webページに正常に渡されます。

を(。{{ reportid }}がそれを示している)しかし、私はへのルートを変更した場合:

@street_report_blueprint.route('/<string:reportid>', methods=['POST', 'GET']) 

...それは動作しません:WERKZEUGはDid you forget to include the UUID?の線に沿ってルーティングエラーがスローされます。私は Werkzeug's URL Routing docsを見て、SOとGoogleをチェックしたので、私は誰も少なくともdownvotesを望みません。

UUIDを生成してBlueprintメソッドを呼び出すJinjaステートメントの中に渡す簡単な方法はありますか?

<form class="form-horizontal" action = "{{ url_for('street_reports.get_streetreport') }}" method="post"> 
+0

"Werkzeugがルーティングエラーをスローします。"エラーは何ですか? –

答えて

0

私は私はあなたが求めているものを理解していないが、私はそれに答えるのショットを取るよ:現在、私は持っています。

私が間違っていない限り、上記の2つのサンプルスニペットの大きな違いは、最初のスニペットでは、そのURLにアクセスするときにUUIDを指定する必要はなく、2番目のスニペットURL末尾の文字列のが必要です。

ユーザーが特定のURL(たとえばwww.website.com/thing/)に移動できるようにしているように思えますし、そのようなURLを持っていれば、そのURLに固有のUUIDが生成され、そのUUID URLの末尾にあるはずです(www.website.com/thing/d0248364-b3ec-481e-a725-2846c6e72576など)。ユーザーがUUIDをURLの最後に指定すると(例:www.website.com/thing/d0248364-b3ec-481e-a725-2846c6e72576)、そのページに移動する必要があります。

私がその状況で行うことは、2つのGETルートを持つことです.1つはUUIDがまだ生成されていない状況で、もう1つはUUIDがわかっている状況です。前の状況(UUIDを作成する必要がある)では、UUIDを作成して、URLの最後にUUIDが必要な2番目のルートにリダイレクトします。

+0

ありがとう@Nathan、はい、ほんとうに感謝したいと思いますが、このページが最初に生成されたときに、ページの読み込み時にUUIDを生成してURLに表示する方法がわかりません。また、フォームからこのページに変数をポストするので、ページが最初に生成されたときにPOSTリクエストとなることを意味しますか?そして、おそらくまた取り戻されたときにGETしてください。 Werkzeugのエラーはあなたがuuidを含むことを忘れました、残念ながら別の場所ですが、私は思っています。 –

+0

"Uuidをどのようにしてページのロード時に生成し、このページが初めて生成されたときにURLに表示するかわかりません。私の答えで説明するように、ユーザーを新しいURL(URLにUUIDを持つURL)にリダイレクトする必要があります。 –

+0

"はフォームからこのページに変数をポストするので、ページが最初に生成されたときにPOSTリクエストになるという意味です。「最初のルートはPOSTルートになり、2番目のルートにリダイレクトされます。これはGETルートになり、URLにUUIDを含みます。 –

関連する問題