【问题标题】:Centralizing Flask routes集中化 Flask 路由
【发布时间】:2017-09-02 13:36:00
【问题描述】:

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

GET    /recovery         controllers.application.recovery()
GET    /signup           controllers.application.signup(lang="sv")
GET    /<:lang>/signup   controllers.application.signup(lang: String)

在 Flask 中是否可行/容易做到?

【问题讨论】:

    标签: python flask


    【解决方案1】:

    是的,很简单:

    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()
    

    【讨论】:

    • 这当然可以在没有eval() 的情况下完成。 stackoverflow.com/questions/1832940/…
    • 并非所有内容都应包含在程序员的方便范围内。数据将更好地表示为(method, path, function) 三元组的序列,如('GET', '/recovery', controllers.application.recovery),允许for method, path, func in routes:。这避免了非常不必要的eval 调用。
    猜你喜欢
    • 2012-04-16
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 2018-05-07
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多