当前位置: 首页 > 知识库问答 >
问题:

请求前的烧瓶-为特定路由添加异常

顾光明
2023-03-14

在下面的before_request()函数中,如果用户尚未登录,我想将其重定向到登录。是否有一个特殊的变量可以提供当前URL,该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,因为如果我不这样做,服务器将进入无限循环。

共有3个答案

支铭晨
2023-03-14

下面是使用flask登录的公认答案的实现:

@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()
郎言
2023-03-14

你可以用一个装饰师。下面的示例显示了如何在特定请求之前检查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
穆乐逸
2023-03-14

您可以检查请求对象上的几个属性,并在此处记录,request.path可能是您想要的。不过,我可以建议request.endpoint吗,这样如果您决定将视图路由到另一个url或多个url,您就会被覆盖

@app.before_request
def before_request():
    if 'logged_in' not in session and request.endpoint != 'login':
        return redirect(url_for('login'))
 类似资料:
  • 问题内容: 我正在用React构建Flask应用程序,但最终遇到了路由问题。 后端负责成为API,因此某些路由如下所示: 以及通往React的主要路线: 我在React应用程序中使用react-router,一切正常,react- router带我进入,并获得了渲染视图,但是当我刷新页面时,Flask应用程序会处理此调用,并且会出错。 最好的解决方案是什么?我正在考虑重定向所有未调用的调用,这是不

  • 问题内容: 在下面的函数中,如果用户尚未登录,我想将其重定向到。是否有一个特殊的变量可以为我提供当前的URL,该URL可以像下面的示例那样工作? 我需要检查当前URL是否为,因为如果不这样做,服务器将进入无限循环。 问题答案: 您可以检查请求对象上的几个属性(可能在此处记录),请参见此处记录。不过,我可以建议一下,这样一来,如果您决定将视图路由到另一个或多个URL,就会被覆盖

  • 我尝试使用axios对烧瓶服务器进行POST: 现在是烧瓶的部分 但是,我最终会出现以下错误: 无法加载XMLHttpRequesthttp://127.0.0.1:5000/test.对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“access control Allow Origin”标头。起源'http://localhost:3000因此不允许访问。 为什么?我将按照建议设置标题

  • 客户端代码: 服务器代码: 问题是我的用户名和密码总是空的。 我还尝试使用: 和 打印内容时,我有: 编辑: 我添加了json。转储和使用请求。获取_json(),它就成功了

  • 我正在将Flask与Apache一起使用。当我发送带有长url(19000个字符)的GET请求时,响应是 我怀疑该请求触发了< code > werkzeug RequestURITooLarge异常或flask 。当我用相似的url长度直接向Apache发送请求时,没有错误。 有没有办法增加Flask处理的最大url长度?

  • 动态请求路由是 linkerd 更为强大和灵活的功能之一。当 linkerd 接收到请求时,它必须以某种方式确定路由该请求到哪里。它通过为请求分配服务名称,然后应用 dtab 重写来实现。 这引入了服务目的地(例如,foo服务)和具体目的地(例如在东海岸数据中心运行的foo服务的staging版本)之间的区别。当应用程序只用服务名称来定位请求时,它们才能完全与环境无关。 流量转移 通过修改 dta