【问题标题】:web2py redirect to https function for certain pages某些页面的 web2py 重定向到 https 功能
【发布时间】:2019-03-31 12:23:05
【问题描述】:

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

必须有更好的方法来做到这一点。有哪些推荐选项?

【问题讨论】:

    标签: https url-redirection web2py


    【解决方案1】:

    已经有内置方法request.requires_https()——调用时,如果当前请求不是通过HTTPS,它会使用https方案重定向到当前URL。

    关于redirect,这是在web2py执行环境中定义的全局,所以只在模型、控制器和视图中可用。您可以使用current.globalenv['redirect'] 在模块中通过current 对象访问它。

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

    from gluon.http import HTTP
    from gluon.html import URL
    
    raise HTTP(303, location=URL(...))
    

    【讨论】:

    • 谢谢。这几乎是完美的。我只想在不使用request.is_local 运行时重定向,所以我想我可以简单地做一个快捷方式,或者,例如request.is_local or request.requires_https()
    猜你喜欢
    • 2014-03-19
    • 2015-08-31
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    相关资源
    最近更新 更多