我有一些控制器功能(在不同的控制器中)用@auth.requires_membership(role='manager')
装饰。如果这是一个HTTP请求,我想确保将这些(而且只有这些)重定向到https版本。
我尝试将这样的函数抽象到模块中,我在需要重定向的任何控制器中的函数开头调用该函数,但是web2py抱怨“未定义全局名称'redirect'”:
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))
必须有一种更好的方法。推荐的选项是什么?
答案 0 :(得分:1)
已经有内置方法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(...))