【问题标题】:Python Flask, how to set 'Content-Type' for static files (js)?Python Flask,如何为静态文件(js)设置“内容类型”?
【发布时间】:2013-01-30 10:59:45
【问题描述】:

对于我的 Flask 应用,我使用“windows-1251”编码。要绘制模板,我将“Content-Type”设置如下:

from flask.helpers import make_response

def render_tmpl_dummy():
    response = make_response("Some Russian text here")
    response.headers['Content-Type'] = 'text/html; charset=windows-1251'
    return response

这里一切都好。但我的静态 js 文件也在“windows-1251”中。那么,有没有办法为所有静态文件设置'Content-Type=application/x-javascript; charset=windows-1251'? (PS:我不想提前手动转成UTF-8,这个方法不适合我)

【问题讨论】:

  • 无意冒犯,但为什么是 Win1251?
  • 遗留代码......父项目已经使用win1251 5年以上

标签: python flask content-type


【解决方案1】:

这就是我能够在静态文件夹中为所有具有自定义extension 的文件在开发服务器上提供自定义MIME type 的方法:

if __name__ == '__main__':

    CUSTOM_FILE_EXTENSION = '.jsonl'
    CUSTOM_MIME_TYPE = 'application/jsonl+json'

    @flask_app.route(flask_app.static_url_path + '/' + '<path:path>' + CUSTOM_FILE_EXTENSION)
    def jsonl_mime_type(path):
        return flask.send_from_directory(
            directory=flask_app.static_folder,
            path=path + CUSTOM_FILE_EXTENSION,
            mimetype=CUSTOM_MIME_TYPE
        )

实际上,我只是重新发明了 Flask 静态 Web 服务器,它显然由 Flask 构造函数中的 single call 到 add_url_rule() 组成:

        self.add_url_rule(
            f"{self.static_url_path}/<path:filename>",
            endpoint="static",
            host=static_host,
            view_func=lambda **kw: self_ref().send_static_file(**kw),
        )

我遇到了所有这些麻烦,所以开发服务器的行为更像生产,其中 Apache 有一个 gentler 方式来设置 MIME 类型。

【讨论】:

    【解决方案2】:

    您的静态文件不应由 Web 服务器提供,除非是在开发中,因此转换文件编码是 正确 方法。

    如果您不首先转换文件的原因是由于体积,请参阅How to convert a file to utf-8 in Python? 了解如何自动转换。

    【讨论】:

    • 转换文件让我很不舒服,因为我是从父项目中获取的。事实上,这个项目——它切断了父大项目的一部分,带有一个小的特定任务。这就是我使用 Flask 及其网络服务器进行“生产”的原因。
    • 这属于评论。它为另一个问题提供了一个可能的解决方案,并且比它的优点更确定。
    猜你喜欢
    • 2012-07-31
    • 2018-10-07
    • 1970-01-01
    • 2013-04-22
    • 2017-05-22
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    • 2023-02-25
    相关资源
    最近更新 更多