Webapp2 实际上开箱即用地提供了这一点 -WSGIApplication
类实例Router
在其router
属性中提供了一个实例,可用于集中式 URL 映射,如文档中所示。
Flask 没有,但这实际上以最基本的形式记录在Patterns for Flask: Lazy Loading中。使用LazyView
它定义的类,您可以构建一个系统来提供中央 URL 映射 - 可以是每个模块中的预定义符号,也可以是模块中的特定函数或类实例。
实际上,我最近发布了一个包 ( HipPocket ),它提供了包装器来简化此模式的入门。它为此提供了两个类LateLoader
和Mapper
. 使用 HipPocket,您的中央路由配置文件可能如下所示(假设包布局类似于此处讨论的内容):
应用程序.py
from flask import Flask
app = Flask("yourapp")
# ... snip ...
网址.py
from .app import app
from hip_pocket import Mapper
mapper = Mapper(app)
mapper.add_url_rule("/", "index.index")
mapper.add_url_rule("/test", "index.test_endpoint", methods=["POST"])
mapper.add_url_rule("/say-hello/<name>",
"say_hello.greeter",
methods=["GET", "POST"])
索引.py
def index():
return "Hello from yourapp.index.index!"
def test_endpoint():
return "Got a post request at yourapp.index.test_endpoint"
say_hello.py
def say_hello(name=None):
name = name if name is not None else "World"
return "Greetings {name}!".format(name=name)
运行应用程序.py
from yourapp.app import app
from yourapp.urls import mapper
# We need to import the mapper to cause the URLs to be mapped.
if __name__ == "__main__":
app.run()
欢迎请求请求和问题报告!