我正在編寫一個應用程序,用戶可以在其中存儲可指定REST接口的信息。 IE,將產品列表存儲在/<username>/rest/products
。由於URL之前顯然不知道,我試圖想到在Flask中實現動態URL創建的最佳方式。我想到的第一種方法是編寫一個全面的規則,並從那裏路由URL。但是,當Flask已經內置了它們時,我基本上重複了URL路由功能。所以,我想知道如果使用.add_url_rule()
(docs here,向下滾動一下)將它們直接附加到應用程序是不是一個好主意。有沒有具體的理由不應該這樣做?將URL規則動態添加到Flask應用程序
9
A
回答
12
每次執行add_url_rule()
時,內部路由會重新映射URL映射。這既不是線程安全的也不是快速的。我現在不明白你爲什麼需要用戶特定的URL規則。它有點聽起來像你真的想安裝用戶特定的應用程序?
0
我有過類似的要求對我的應用程序,其中對於給定的SOMEID
每個端點/<SOMEID>/rest/other
應界定爲不同的功能。實現此目的的一種方法是保留一個查找字典,其中的值是處理特定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>
是需要傳入的參數,爲什麼不使用url規則(如/rest/product/<username>
)或將它作爲GET請求中的參數傳遞? 希望有所幫助。
相關問題
- 1. 動態添加驗證規則到MVC3
- 2. 使用動態JQueryValidation和添加規則
- 3. 將頁面動態添加到jQuery移動Web應用程序
- 4. 將應用程序添加到啓動
- 5. 將規則動態添加到CSS文件
- 6. 將Devexpress GridControl動態添加到C#windows應用程序
- 7. 如何將.Net控件動態添加到vb6應用程序
- 8. 將動態添加到Web應用程序
- 9. 在動態表單上添加規則
- 10. jQuery - 動態添加驗證器規則?
- 11. 如何動態添加路由規則?
- 12. 動態添加驗證規則
- 13. 將DotNetNuke標記動態添加到URL
- 14. 如何將規則添加到此程序中?
- 15. 將Flask應用程序部署到OpenShift
- 16. 動態添加規則以驗證各種各樣的規則
- 17. 將Mac OS X應用程序添加到「常規服務」
- 18. 將React應用程序集成到Flask應用程序
- 19. 將用戶添加到應用程序
- 20. 修改Mod_rewrite規則,將文章標題添加到URL
- 21. 將路由規則添加到Wordpress HTACCESS並保留URL
- 22. Web應用程序中的動態業務規則
- 23. 如何將flask-oauthlib添加到cookiecutter-flask
- 24. 在MVC應用程序中添加路由規則
- 25. 使用Flask將URL加載到iFrame中
- 26. 當動態添加CSS規則到文檔時等待樣式被應用
- 27. 將規則添加到.aff文件solr4.9
- 28. 將SelectMultipleField的動態數量添加到wtf-flask表格中
- 29. 將Settings.bundle添加到iPhone應用程序
- 30. 將OpenCV添加到iOS應用程序
我有同樣的要求,即我正在尋找一種方法來動態地添加新的端點到[Eve](http://python-eve.org)使用它的'register_resource'方法構建的API,該方法調用' add_url_rule'在內部。請注意,對於每個請求都不會發生這種情況,只有在收到特定端點的「POST」時纔會觸發,因此性能不應該成爲問題。 – kynan
這裏的要求完全相同。 Api,需要在某個路由發生PUT請求時添加和刪除新路由。在我的情況下,我用燒瓶寧靜,但基本上是一樣的。 – cllamach
看來我可以在before_request中做到這一點,如果我使用threading.lock,但是,我不知道如何停止與url_for有以下錯誤的問題:ValueError:在排序過程中修改列表錯誤:應用程序:內部服務器錯誤,列表修改在排序 – pip