web2py重定向到某些页面的https函数

时间:2019-03-31 12:23:06

标签: https url-redirection web2py

我有一些控制器功能(在不同的控制器中)用@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))

必须有一种更好的方法。推荐的选项是什么?

1 个答案:

答案 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(...))