gpt4 book ai didi

python - 复合应用程序路由问题

转载 作者:太空宇宙 更新时间:2023-11-04 06:01:30 25 4
gpt4 key购买 nike

在我的 Pyramid 应用程序中,我设置了一个复合应用程序,我的主应用程序位于 / 上,我的管理门户位于 /admin 上。

[composite:main]
use = egg:paste#urlmap
/ = mainapp
/admin = adminapp

[app:mainapp]
use = egg:myApp#main

[app:adminapp]
use = egg:myApp#admin

我还在我的 __init__.py 方法中添加了两个单独的初始化方法,这样我就可以有两个单独的 add_request_method 和身份验证策略——一个用于一般用户,另一个对于管理员。

为了测试这一点,我添加了两条路线,一条是:

config.add_route('admin_login_handler', '/admin/login/')

用于管理门户登录,另一个为:

config.add_route('login_handler', '/login/')

用于一般站点登录。据推测,我会看到两个不同的模板,一个用于每个 View ,并且我会有一个单独的请求对象供管理员和一般用户使用 – self.request.admin 用于管理员和 self.request。 user 为用户。

但是,当我转到 /admin/login/ 时,会显示 /login/ 模板。基本上,我的主应用程序的路由现在位于 //admin 下,我的管理路由被忽略了。这不是我想要的。但是,在查看 /admin 路由时,我确实得到了我想要的 self.request.admin 对象,而我的 self.request.user 对象在我的/ 路由,与显示的模板/ View 无关。

我怎样才能解决这个问题,以便带有 /admin/... 的路由不会“重新映射”到我的 / 路由,并且我有两个独立的应用程序在两个不同的路由前缀?

最佳答案

为了解决这个问题,我将 config.scan(ignore="myApp.views.main") 添加到我的 __init__.admin_app 方法中,同样地,config.scan(ignore="myApp.views.admin") 到我的 __init__.main_app 方法。请注意将 View 分成两个文件,以使其明确且易于处理。

这将两个应用程序之间的两组路由分开,然后我可以让我的两个授权策略生效,连同我的 config.add_request_method -- 一个检查 admin 表,另一个检查 user 表——在各自的初始化方法中。

config.add_request_method(AuthHelper.get_user, 'user', reify=True)  # Global user object

config.add_request_method(AuthHelper.get_admin, 'admin', reify=True) # Global admin object

根据我的 .ini 文件,我的管理路由被映射到 /admin 的隐式“路由前缀”。

到目前为止,这个实现非常好。希望这可以在某些时候对某人有所帮助。

关于python - 复合应用程序路由问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24730520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com