Python 集中烧瓶路线

Python 集中烧瓶路线,python,flask,Python,Flask,我的同事希望将web服务器的所有路由放在一个路由文件中,而不是将它们分散在一堆函数中。他在Java/Play中就是这样做的: GET /recovery controllers.application.recovery() GET /signup controllers.application.signup(lang="sv") GET /<:lang>/signup controllers.application.signu

我的同事希望将web服务器的所有路由放在一个路由文件中,而不是将它们分散在一堆函数中。他在Java/Play中就是这样做的:

GET    /recovery         controllers.application.recovery()
GET    /signup           controllers.application.signup(lang="sv")
GET    /<:lang>/signup   controllers.application.signup(lang: String)
GET/recovery controllers.application.recovery()
获取/注册控制器.application.signup(lang=“sv”)
GET//signup controllers.application.signup(lang:String)
在烧瓶中进行是否可行/容易?

是的,非常容易:

from flask import Flask
import controllers.application

app = Flask(__name__)
routes = '''\
GET    /recovery        controllers.application.recovery
GET    /signup          controllers.application.signup
GET    /<lang>/signup   controllers.application.signup'''

for route in routes.splitlines():
    method,path,func = route.split()
    app.add_url_rule(rule=path, view_func=eval(func), methods=[method])

app.run()
从烧瓶导入烧瓶
导入控制器.应用程序
app=烧瓶(名称)
路由=“”\
获取/恢复控制器.application.recovery
获取/注册控制器.application.signup
获取//注册控制器.应用程序.注册“”'
对于routes.splitlines()中的路由:
方法,路径,func=route.split()
app.add\u url\u rule(rule=path,view\u func=eval(func),methods=[method])
app.run()

这当然可以在没有
eval()的情况下完成。并不是所有的东西都应该包含在程序员的便利之下。数据将更好地表示为一系列
(方法、路径、函数)
三元组,如
('GET','recovery',controllers.application.recovery)
,允许
路由中的方法、路径、函数:
。这避免了不必要的
eval
调用。