web2py 如何注销用户

Posted

技术标签:

【中文标题】web2py 如何注销用户【英文标题】:web2py How lo log out a user 【发布时间】:2012-06-13 16:01:44 【问题描述】:

我刚刚开始研究 web2py,该方法中的很多东西都是 nwe,例如使用视图的默认值等。 我花了很多时间试图弄清楚如何让人们登录并最终放置

@auth.requires_login()

在控制器方法的开头。这神奇地弹出了一个注册表单,之后新用户就登录了。 我不确定我是否完全了解幕后发生的事情,但一步一步来。

但是,我想提供一个注销按钮,但不知道如何实现。显然我需要以某种方式调用默认注销。所以我需要在提交表单/按钮中添加一个 url 并大概创建一个控制器来匹配 url,但是注销的方法会是什么样子?

在用户方法中是暴露语句,但不知道它们的含义或如何使用它们。所有这些点都让我感到困惑。

【问题讨论】:

【参考方案1】:

我花了很多时间试图弄清楚如何让人们登录

你读过this section 的书吗?它解释了@auth.requires_login() 的使用以及默认的user() 函数如何工作以公开登录功能(以及如何在需要时专门为登录创建单独的操作)。在脚手架应用程序中,default.py 控制器包含以下 user() 函数以公开所有 Auth 操作:

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

在像“/myapp/default/user/[action]”这样的 URL 中,请求的 Auth 操作(即 URL 的最后一个元素)将在 request.args[0] 中可用。当上述函数调用auth()时,Auth__call__()方法会从request.args[0]中读取action,然后调用相应的Auth方法。如果 URL 是“/myapp/default/user/login”,auth() 将最终调用 auth.login() 方法,该方法将返回(并处理)登录表单。如果您想创建自己的自定义登录操作,也可以直接调用auth.login()

同样,URL "/myapp/default/user/logout" 最终会调用auth.logout() 方法,从而注销用户。所以,如果你想启用注销,只需生成一个指向注销 URL 的链接——最好的方法是使用 URL() 函数:

A('Logout', _href=URL('default', 'user', args='logout'))

注意,在脚手架应用程序中,layout.html 视图使用auth.navbar() 在页面右上角插入 Auth 导航栏——当用户登录时,该导航栏会自动包含一个“注销”链接,例如上面那个。

【讨论】:

我确实阅读了在线书籍中的部分。我还在线购买了“Web2py Cookbook”这本书,但我看不到它在哪里说要获得登录屏幕,您将装饰器放在受控制的方法之前。 如果您查看 layout.html 中的源代码,那里没有显示 /user/login 的内容。但是,如果您查看网页上的源代码,您可以在那里看到它。感谢您的帮助,我仍然认为对于新用户来说,可以有一个示例来说明如何将登录屏幕添加到简单的应用程序中。 在Auth decorators部分它说,“如果访问者未登录,则无法检查权限;访问者被重定向到登录页面,然后返回需要访问的页面权限”。因此,装饰器不仅限制访问,而且如果用户未登录,它们会重定向到登录页面。也许这可以更清楚。 关于 layout.html,正如我在上面的答案中提到的,layout.html 包括auth.navbar()——它是对auth.navbar() 的调用,它生成了 Auth 链接(登录、注册、注销、等等。)。它只是一个方便的助手——你不必使用它——你可以生成自己的链接。

以上是关于web2py 如何注销用户的主要内容,如果未能解决你的问题,请参考以下文章

如何在 web2py 中使用模块?

如何在 PythonAnywhere 上部署 web2py?

如何在 web2py 中定义自定义主键

Web2py 数据库:如何从选定的行中选择行的子集?以及如何将它传递给 JavaScript?

你如何阅读的web2py的探查产生的.prof文件?

当用户注销其中一个标签时,如何自动从所有打开的标签中注销用户?