我正在编写一个应用程序,用户可以在其中存储可指定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