6

フラスコアプリに以下のルーティングがあります

from foo import get_foo

@app.route("/foo/<int:id>")
def foo_id(id):
    return render_template('foo.html', foo = get_foo(id))

Foo は 1 ~ 300 の ID を持つことができます。この検証はどこで行うことができますか?

get_foo 内で検証を行うことができます。しかし、それがベストプラクティスかどうかはわかりません。ルート定義自体でフィルタリングする必要がありますか?

のようなもの@app.route("/foo/<int:id(1-300)")(これを行う正確な方法はわかりません。

どうすれば自分のニーズを達成できますか?

4

1 に答える 1

12

Flask は Werkzeug ルーティング システムを使用します。Werkzeug URL Routing docsを調べたところ、ルート ルールで範囲制御が可能であることがわかりました。

Werkzeugのドキュメントから

class werkzeug.routing.IntegerConverter(map, fixed_digits=0, min=None, max=None)

minしたがって、キーワード引数をmax次のようにルート ルールに設定できます。

@app.route("/foo/<int(min=1, max=300):id>")

が範囲外の場合id、リクエストはレスポンスを取得し404ます。

お役に立てれば。


コメントの編集:

したがって、範囲検証には2つのオプションがあります

  1. ルーティングで
  2. get_fooメソッドで

選択はあなた自身の状況に依存すると思います。

上記のように、最初のオプションは範囲外の404場合にすぐに応答します。id

2 番目の方法では、 の範囲を検証し、id不適切な要求に対処するために好きなことを行うことができます。

于 2013-09-29T09:29:24.940 に答える