[英]python flask before_request exclude /static directory
感谢下面的答案,我有一个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
文件,但是对于我的flask应用程序定义的路由仍然使用此before_request
?
您需要向Apache配置文件(或.htaccess文件,如果您无权访问.conf
文件)添加Alias
或AliasMatch
指令,以确保Apache提供静态文件,而不是Flask。 确保您提供了一个Directory
以允许Apache Web服务器访问您的静态路径 。 (另外,如果您正在编辑.conf
文件,请不要忘记重新启动Apache,以便更改您的更改)。
作为临时的间隙措施(或者为了便于在开发中使用),您还可以检查以确保字符串/static/
不在request.path
:
if 'logged_in' not in session \
and request.endpoint != 'login' \
and '/static/' not in request.path:
我认为有一个解决方案比检查request.path
更清晰。
if 'logged_in' not in session and request.endpoint not in ('login', 'static'):
return redirect(url_for('login'))
我同意Apache的方法,但为了快速修复,我在before_request()函数的开头有以下逻辑:
if flask.request.script_root == "/static":
return
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.