【发布时间】:2021-02-16 15:16:03
【问题描述】:
功能说明
在烧瓶中这段代码:
@app.route('/')
def index():
return ...
或
foo_router = Blueprint('foo', __name__)
@foo_router.route('/')
def index():
return ...
app.register_blueprint(foo_router, url_prefix='/api')
这些方法可以让您使用url_for('index') 来检索像https://hostname:8080/ 这样的网址
或使用url_for('foo.index') 来检索像https://hostname:8080/api/foo 这样的网址
所需功能
使用url_for 作为fastapi 中的跳转链接,例如flask
附加上下文
我发现了一个技巧来做这个工具
创建url_naming.py并在下面添加代码
from starlette.routing import Mount, Route
from .routers.foo.endpoints.area import index as foo_area_index
foo_router_for = Mount('/', routes=[
Route('/area', foo_area_index, name='foo_area.index'),
])
并在您的main.py 中添加
from .url_naming import foo_router_for
app.add_route('/foo', foo_router_for, name='foo_area.index')
在代码块中,我定义了两次 name,因为我在 Route 模型中定义的 name 无法被 FastAPI 检测到,或者它被 FastAPI 覆盖,并且 这个 impl 没有意义 因为需要写下真正的路由器名称而不是端点函数名称。
尽管如此,如果我想在一个文件中命名我的路由器,这对main.py 不起作用?
【问题讨论】:
标签: python python-3.x jinja2 fastapi