所以我的主控制器是default.py这不是一个大问题 我在user.py控制器中使用
调用我的authform=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',
),
)
答案 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操作。