本文介绍了Fastapi如何使用TemplateResponse向所有路由器添加变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
我使用 JinjaTemplate 并以这种方式将数据返回到 html
@router.get('/', response_class=HTMLResponse)
async def main_page(request: Request,
members: List = [e.value for e in MembersQuantity],
activity_service: ActivityService = Depends(),
):
activity = await activity_service.get()
return templates.TemplateResponse('base.html',
context={
'request': request,
'members': members,
'activities': activity,
}
)
项目中有几十个这样的溃败。 他们每个人都需要有相同的上下文变量。 我需要在所有路由器中传递变量 - 例如user
。
我可以编写这种传递user
object 的方式(它存储在 Redis 中)
@router.get('/', response_class=HTMLResponse)
async def main_page(request: Request,
members: List = [e.value for e in MembersQuantity],
activity_service: ActivityService = Depends(),
):
activity = await activity_service.get()
user = None
if await is_authenticated(request):
user = await get_current_user(request)
return templates.TemplateResponse('base.html',
context={
'request': request,
'members': members,
'activities': activity,
'user': user,
}
)
模板
<html>
<head>
<title>Item Details</title>
<link href="{{ url_for('static', path='/styles.css') }}" rel="stylesheet">
</head>
<body>
<a href="{{ url_for('user_notification', pk=user.user_id) }}">
</body>
</html>
但是在每个路由器上都这样做是完全错误的。
我知道在request.state
或response.set_cookie
中使用middleware
传递全局变量的不同方法。 但出于安全原因,这种方法不适合。
如何将我想要的值全局转移到所有路线的context
中?
暂无解决方案
[英文标题]Fastapi how to add variable to all router with TemplateResponse
声明:本媒体部分图片、文章来源于网络,版权归原作者所有,如有侵权,请联系QQ:330946442删除。