【问题标题】:Serving Static HTML in Flask while performing some DB operations在执行一些数据库操作时在 Flask 中提供静态 HTML
【发布时间】:2016-04-10 16:42:51
【问题描述】:

我的烧瓶应用程序中有一个端点,我想在数据库中执行一些日志记录,然后在响应中提供一个静态 HTML 文件。终点是这样的:

@app.route("/man/<os>/<section>/<name>")

我有数千个不同的 HTML 文件,这取决于 URL,其中一个需要返回。我已将 Nginx 配置为提供所有静态文件。但是,我在 Flask 中处理这些 URL,在数据库中进行日志记录,并通过请求模块流式传输 HTML 文件(见下文)

    host = request.host
    path = 'man_pages/' + os + '/html' + section + '/' + name + '.html'
    url = 'http://' + host + url_for('static', filename=path) #TODO don't hardcode the scheme
    req = requests.get(url, stream=True)
    return Response(stream_with_context(req.iter_content()), content_type=req.headers['content-type'])

这导致对 Nginx 的两个请求,我认为这不是最有效的方法。有没有办法在烧瓶应用程序中记录数据库,然后使用 Nginx 提供静态 HTML 文件?

【问题讨论】:

    标签: python nginx flask static gunicorn


    【解决方案1】:

    是的,只需一个请求即可完成。

    其他 Web 服务器具有 X-Sendfile 标头,Flask 具有内置支持。

    Nginx 不支持这个头,它有类似的X-Accel-Redirect。不幸的是,Flask does not support it

    您必须配置一个nginx 路由来支持它并使Flask 返回X-Accel-Redirect 标头。

    看看xsendfile,我觉得对你有用。

    我没有给你一个完整的解决方案,因为我认为你只需要一个提示和一些关于 X-Accel-Redirect 标头的指针。

    其他一些有用的资源:

    https://gist.github.com/jessejlt/1306827

    http://www.mli.gmu.edu/toz/wordpress/2014/07/31/serving-files-with-flask-behind-nginx-gunicorn/

    【讨论】:

      猜你喜欢
      • 2014-08-26
      • 2012-09-06
      • 2012-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-03
      相关资源
      最近更新 更多