我有一些用@auth.requires_membership(role='manager')
装饰的控制器功能(在不同的控制器中)。如果这是一个http请求,我想确保这些(并且只有这些)被重定向到https版本。
我已经尝试将这样的函数抽象为一个模块,我在任何需要重定向的控制器中调用该函数的开头但是web2py抱怨“未定义全局名称'重定向'”:
from gluon import current
def https_redirect() :
request = current.request
if not request.is_local and not request.is_https:
redirect(URL(scheme='https', args=request.args, vars=request.vars))
必须有更好的方法来做到这一点。有哪些推荐选择?
已经存在内置方法request.requires_https()
- 当被调用时,如果当前请求不是通过HTTPS,则使用https
方案重定向到当前URL。
关于redirect
,这是web2py执行环境中定义的全局,因此仅在模型,控制器和视图中可用。您可以使用current
通过current.globalenv['redirect']
对象在模块中访问它。
你也可以直接使用HTTP
异常重定向(这是redirect
在幕后所做的):
from gluon.http import HTTP
from gluon.html import URL
raise HTTP(303, location=URL(...))