Javascript 如何在web2py中从视图动态检查登录状态
我需要检查用户是否仍在登录,以便在会话过期(已注销但页面尚未刷新)时阻止他们打开表单 这是我试图做的伪代码,显然不起作用Javascript 如何在web2py中从视图动态检查登录状态,javascript,python,ajax,web2py,Javascript,Python,Ajax,Web2py,我需要检查用户是否仍在登录,以便在会话过期(已注销但页面尚未刷新)时阻止他们打开表单 这是我试图做的伪代码,显然不起作用 // some view.html $('#someform').click(function() { ajax(URL('login_status'), [], ''); }); // some controller.py def login_status(): if not auth.user: redirect('index') 如果
// 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请求本身)。要实现这一点,可以在
ajax()
函数中指定“:eval”作为目标,这将导致返回的响应作为Javascript代码执行(请参阅)。比如说:
$('#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)
这将在幕后做同样的事情。此外,这可能会有所帮助:
{{if auth.is_logged_in():}}
那就对了!谢谢Anthony。当页面第一次返回到浏览器时,这将非常有用,但如果页面加载后登录状态发生更改,则不会更新。