使用 web2py 时,为什么 url 在使用 auth 时自动更改

when using web2py ,why the url changed automatically when using auth

我在控制器文件中定义了一个函数(test.py) 代码是:

def user():
    return dict(form=auth())

然后,当我访问http://localhost:8000/demo/test/user 为什么url自动变成了http://localhost:8000/demo/default/user/login

当您通过 auth() 调用 Auth 对象时,它会检查 URL 参数(即 URL 在控制器和函数之后的部分)以确定请求的身份验证方法(例如,登录、注册、个人资料等)。如果没有 URL arg(如您的情况),则它会重定向到与当前相同的 URL,但会附加 /login (否则,它不会 return 没有请求任何特定的 Auth 方法)。

如果您要使用上述构造(即,简单调用 auth() 的通用 user 函数),那么您应该创建包含特定 Auth 方法的 link作为第一个 URL 参数。如果出于某种原因你希望登录 link 成为 /user(没有任何 URL arg),你可以这样做:

def user():
    if not request.args:
        form = auth.login()
    else:
        form = auth()
    return dict(form=form)

当没有 URL 参数时,这将显式 return 登录表单,否则会退回到标准行为。

您当然也可以对每个 Auth 方法进行完全独立的操作:

def login():
    return dict(form=auth.login())

def register():
    return dict(form=auth.register())

etc.