Fastapi如何使用TemplateResponse向所有路由器添加变量

发布时间:2022-10-07 / 作者:清心寡欲

本文介绍了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.stateresponse.set_cookie中使用middleware传递全局变量的不同方法。 但出于安全原因,这种方法不适合。

如何将我想要的值全局转移到所有路线的context中?




暂无解决方案

[英文标题]Fastapi how to add variable to all router with TemplateResponse


声明:本媒体部分图片、文章来源于网络,版权归原作者所有,如有侵权,请联系QQ:330946442删除。