web2py 重定向到某些页面的 https 功能

web2py redirect to https function for certain pages

我有一些控制器功能(在不同的控制器中)装饰有 @auth.requires_membership(role='manager')。如果这是一个 http 请求,我想确保这些(并且只有这些)被重定向到 https 版本。

我试过将这样的函数抽象到一个模块中,我在任何需要重定向的控制器中在函数开始时调用它,但是 web2py 抱怨 "global name 'redirect' is not defined":

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,则重定向到当前URL,使用https方案.

关于redirect,这是在web2py执行环境中定义的全局变量,因此仅在模型、控制器和视图中可用。您可以使用 current.globalenv['redirect'].

通过 current 对象在模块中访问它

您也可以直接使用 HTTP 异常进行重定向(这是 redirect 在幕后所做的):

from gluon.http import HTTP
from gluon.html import URL

raise HTTP(303, location=URL(...))