请求前的Flask-为特定的rou添加异常

2024-04-23 06:31:47 发布

您现在位置:Python中文网/ 问答频道 /正文

before_request()函数(下面)中,如果用户尚未登录,我想将其重定向到/login。有没有一个特殊的变量可以给我当前的URL,它可以像下面的例子那样工作?

@app.before_request
def before_request():
    # the variable current_url does not exist
    # but i want something that works like it
    if (not 'logged_in' in session) and (current_url != '/login'):
        return redirect(url_for('login'))

我需要检查当前的URL是否为/login,因为如果不这样做,服务器将进入无限循环。


Tags: the函数用户inappurlrequestdef
3条回答

下面是一个用flask-login实现的已接受答案:

@app.before_request
def require_authorization():
    from flask import request
    from flask.ext.login import current_user

    if not (current_user.is_authenticated or request.endpoint == 'login'):
        return login_manager.unauthorized()

你可以用一个装饰工。下面的示例演示如何在特定请求之前检查API密钥:

from functools import wraps

def require_api_key(api_method):
    @wraps(api_method)

    def check_api_key(*args, **kwargs):
        apikey = request.headers.get('ApiKey')
        if apikey and apikey == SECRET_KEY:
            return api_method(*args, **kwargs)
        else:
            abort(401)

    return check_api_key

您可以将其用于:

@require_api_key

请求对象上有几个属性可以检查,文档化的hererequest.path可能是您想要的。不过,我能建议您使用^{}吗?如果您决定将视图路由到另一个url或多个url,我们将对您进行介绍

@app.before_request
def before_request():
    if 'logged_in' not in session and request.endpoint != 'login':
        return redirect(url_for('login'))

相关问题 更多 >