15

感谢下面的答案,如果用户尚未登录,我有一个before_request功能可以将用户重定向到:/login

请求前烧瓶 - 为特定路线添加例外

这是我的 before_request 的副本:

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

但是,除非用户登录,否则不会提供我的静态目录中的文件。

在我的/login页面上,我正在从/static目录中获取一个 css 文件,但因此无法加载它before_request

我已经使用 apache mod_wsgi 部署了这个应用程序,并且在我的 apache 配置文件中,我什至将该/static目录包含为站点的 DocumentRoot。

如何在/static没有用户登录的情况下添加一个异常来为我的应用程序文件提供服务,但仍将其before_request用于我的烧瓶应用程序定义的路由?

4

3 回答 3

11

您需要向您的 Apache 配置文件(或 .htaccess 文件,如果您无权访问这些文件)添加一个Alias或指令,以确保Apache为您的静态文件而不是 Flask 提供服务。确保您提供了一个允许Apache Web 服务器访问您的静态路径。(另外,如果您正在编辑文件,请不要忘记重新启动 Apache,以便您的更改将被拾取)。AliasMatch.confDirectory.conf

作为一种临时的权宜之计(或使其易于在开发中使用),您还可以检查以确保字符串/static/不在request.path

if 'logged_in' not in session \
    and request.endpoint != 'login' \
    and '/static/' not in request.path:
于 2013-02-08T01:40:28.517 回答
10

我认为有一个比检查更清洁的解决方案request.path

if 'logged_in' not in session and request.endpoint not in ('login', 'static'):
    return redirect(url_for('login'))
于 2015-02-10T09:33:17.983 回答
0

我确实同意 Apache 的方法,但为了快速修复,我在 before_request() 函数的开头使用了以下逻辑:

if flask.request.script_root == "/static":
  return
于 2014-07-25T16:39:04.077 回答