javascript - 如何从 web2py 中的 View 动态检查登录状态

标签 javascript python ajax web2py

我需要检查用户是否仍处于登录状态,这样我就可以防止他们在 session 过期(已注销但页面未刷新)时打开表单。

这是我尝试做的伪代码,显然不起作用。

// some view.html
$('#someform').click(function() {
    ajax(URL('login_status'), [], '');
});

// some controller.py
def login_status():
    if not auth.user:
        redirect('index')

最佳答案

如果您希望整个页面作为 Ajax 请求的结果进行重定向,您必须通过客户端上的 Javascript 来完成,而不是通过服务器端重定向(它只会重定向 Ajax 请求本身)。为此,您可以将“:eval”指定为 ajax() 函数中的目标,这将导致返回的响应作为 Javascript 代码执行(参见 here)。所以,像这样:

$('#someform').click(function() {
    ajax("{{=URL('default', 'login_status')}}", [], ':eval');
});

// some controller.py
def login_status():
    if auth.user:
        return 'this.show()' # or appropriate Javascript code to show the form
    else:
        return 'window.location = "%s"' % URL('default', 'index')

因此,Ajax 调用返回显示表单或重定向页面的 Javascript,具体取决于用户是否已登录。

此外,请注意 URL() 函数是一个服务器端 Python 函数,因此您不能只在 ajax() 函数中调用它,它是客户端 Javascript 函数。相反,您必须将它放在 web2py 的模板定界符 ({{ }}) 中,以便在服务器上的模板中生成 URL。

更新:代替:

return 'window.location = "%s"' % URL('default', 'index')

您现在可以:

redirect(URL('default', 'index'), client_side=True)

这将在幕后做同样的事情。

关于javascript - 如何从 web2py 中的 View 动态检查登录状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10323714/

相关文章:

javascript catch 函数调用

Javascript MySQL 错误?

python - OSError at/admin/pages/richtextpage/3/[Errno 13] Permission denied : '/static'

python - 如何修复 Heroku Openai Django 部署错误?

jquery - MVC 3 JSON 调用在 IIS 中不起作用

javascript - React - 从 Ajax post 请求响应的元数据元素中获取 'message'

javascript - 获取 Canvas 上的图像是否被单击 Javascript

javascript - 哪些手机浏览器支持ES6?

python - 无法发送 key selenium webdriver python

java - JSF h :commandButton doesn't fire with ajax