私は、ユーザーがRESTインターフェースを指定できる情報をユーザーが保存できるようにするアプリケーションを作成しています。 IE、/<username>/rest/products
に製品のリストを保管してください。 URLは明らかにわからないので、私はFlaskで動的URL作成を実装する最良の方法を考えようとしていました。私が考えた最初の方法は、キャッチオールルールを作成し、そこからURLをルーティングすることです。しかし、私は基本的にFlaskがすでにそれらを組み込んでいるときにURLルーティング機能を複製しています。だから、.add_url_rule()
(docs here、スクロールダウン)を使ってアプリに直接添付するのは悪い考えですか?これをしてはならない特別な理由はありますか?FlaskアプリにURLルールを動的に追加
9
A
答えて
12
add_url_rule()
を実行するたびに、内部ルーティングがURLマップを再マップします。これはスレッドセーフでも高速でもありません。私は今、正直であるためにユーザー固有のURLルールが必要な理由を理解していません。ユーザー固有のアプリケーションを実際にマウントしたいと思うようですね。
0
SOMEID
与えられたため、各エンドポイント/<SOMEID>/rest/other
が異なる機能に制限されるべき場所、私は自分のアプリケーションのための同様の要件を持っていました。これを達成する1つの方法は、値が特定のSOMEID
を処理する関数であるルックアップ辞書を保持することです。例えば、このスニペットを見てみましょう:
func_look_up_dict = {...}
@app.route('<SOMEID>/rest/other', methods=['GET'])
def multiple_func_router_endpoint(SOMEID):
if SOMEID in func_look_up_dict.keys():
return jsonify({'result' = func_look_up_dict[SOMEID]()}), 200
else:
return jsonify({'result'='unknown', 'reason'='invalid id in url'}), 404
ので、このケアのためにあなたが本当に「動的」URLルールを追加する必要はありませんが、むしろパラメータでURLルールを使用して、単一のwithing様々なケースを扱います関数。もう一つ考慮すべき点は、そのようなURLエンドポイントの使用例について実際に考えることです。 <username>
が渡される必要があるパラメータの場合は、/rest/product/<username>
などのURLルールを使用しないでください。それとも、GETリクエストの引数として渡してください。 希望に役立ちます。
関連する問題
- 1. cakePHP 2に動的に検証ルールを追加しました。*
- 2. IE8以降で動的に@ font-faceルールを追加する
- 3. 妥当性検査ルールを動的に追加/削除する
- 4. url_for()でFlaskで動的URLを作成
- 5. uitableviewcell - iPhoneアプリにボタンを動的に追加
- 6. 自動的にコピーするときにURLを追加する
- 7. 動的にURLを選択ボックスに追加する
- 8. ページURLに自動的にgwt.codesvrを追加する方法
- 9. AngularJsのスクリプトタグにURLを動的に追加
- 10. Googleアプリでcronジョブの動的追加
- 11. JQuery.Validateメッセージで動的ルールを追加する
- 12. 動的URLのmod_rewriteルールのヘルプ
- 13. AdvancedDataGridに動的に行を追加
- 14. Jquery:hrefを動的hrefに先に追加
- 15. ユニットを自動的にプロジェクトに追加
- 16. ASP.Net MultiViewに動的にビューを追加
- 17. 動的にスクリプトタグをページに追加
- 18. ASP.NET GridViewにフッターを動的に追加
- 19. Android:動的にボタンにOnClickListenersを追加
- 20. RelativeLayoutにコンテンツを動的に追加
- 21. 動的にパネルにhtmlを追加
- 22. 動的にスクロールビューにボタンを追加して追加する
- 23. magento製品に価格ルールを追加
- 24. カスタムフィールドにルールを追加する
- 25. 動的にvb.netの動的パネルにイベントハンドラを追加する
- 26. なぜポストバックが自動的に同じparamをurlに追加しますか?
- 27. キャメルドロウルズコンポーネントにルールを動的に挿入
- 28. 自動的にウェーバーリストに追加
- 29. クラスに動的に追加する
- 30. RMySQL getQueryに動的値を追加
私は、[register_resource]メソッドを使って[Eve](http://python-eve.org)で構築されたAPIに新しいエンドポイントを動的に追加する方法を探しています。内部でadd_url_ruleを実行します。これはすべての要求に対して起こるわけではなく、特定のエンドポイントへの 'POST'が受信されたときだけフックによってトリガされるので、パフォーマンスは問題ではないはずです。 – kynan
ここでの要件はまったく同じです。 PUTリクエストが特定のルートで発生するたびに新しいルートを追加および削除する必要があるApi。私の場合、私はフラスコを安心して使っていますが、基本的に同じです。 – cllamach
threading.lockを使用するとbefore_requestでこれを行うことができますが、url_forで次のエラーが発生するのを防ぐ方法がわかりません:ValueError:ソートエラー時にリストが変更されました:app:Internal Server Error、list modifiedソート中 – pip