从auth中删除默认控制器

时间:2014-10-17 22:35:03

标签: python web2py

所以我的主控制器是default.py这不是一个大问题 我在user.py控制器中使用

调用我的auth
form=auth()

转到/ myapp / user重定向到/ myapp / default / index / login

我希望它转到/ myapp / user / login

我有一个routes.py来从主页获取/ default,但这不适用于auth()

Routes.py

routers = dict(
    BASE = dict(
        default_application = 'myapp',
        default_controller = 'default',
        default_function = 'index',
    ),
)

1 个答案:

答案 0 :(得分:1)

不幸的是,当您将主操作放在除包含“索引”页面的控制器之外的控制器中时,使用Auth很棘手。您可以告诉Auth您正在使用不同的控制器,但它假定您的主页是与Auth在同一控制器中的“索引”操作。这要求您覆盖许多默认设置。

首先,告诉Auth用于Auth操作的控制器和函数:

auth = Auth(db, controller='user', function='user')

然后更改一些默认设置:

default_url_index = URL('user', 'index')
url_index = URL('default', 'index')
for setting in auth.settings:
    if auth.settings[setting] == default_url_index:
        auth.settings[setting] = url_index

现在您的Auth URL看起来像/ myapp / user / user / login等。要从URL中删除“user”函​​数名称,您必须更新routes.py以指示“user”是默认函数在“用户”控制器中:

routers = dict(
    BASE = dict(
        default_application = 'myapp',
        default_controller = 'default',
    ),
    myapp = dict(
        default_function = dict(
            default = 'index',
            user = 'user')
        ),
        functions = dict(
            default = ['index', 'list', 'of', 'functions'],
            user = ['user']
        ),
    )
)

以上为“index”和“user”控制器分别指定了默认功能。另外,请注意,在指定默认函数时,指定每个控制器中的函数列表也很有用 - 如果URL包含函数名后面的任何参数,则路由系统将能够消除歧义(这在Auth“user”功能的情况,因为它总是在“user”之后包含至少一个URL arg,以便识别所请求的特定Auth操作。