您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在生产中从CDN而非Flask服务静态文件

在生产中从CDN而非Flask服务静态文件

无需更改链接静态文件的方式,仍然可以使用url_for('static', filename='myfile.txt')。将认静态视图替换为重定向到CDN(如果已配置)的视图。

from urllib.parse import urljoin
# or for python 2: from urlparse import urljoin
from flask import redirect

@app.endpoint('static')
def static(filename):
    static_url = app.config.get('STATIC_URL')

    if static_url:
        return redirect(urljoin(static_url, filename))

    return app.send_static_file(filename)

无论您是在开发机器上还是在生产机器上,都将STATIC_URLconfig值设置为CDN,并且对静态文件的请求将在此处重定向

重定向相对便宜,并且被浏览器记住。如果您发现性能受到它们的显着影响,则可以编写一个在使用CDN时直接链接函数

@app.template_global()
def static_url(filename):
    static_url = app.config.get('STATIC_URL')

    if static_url:
        return urljoin(static_url, filename)

    return url_for('static', filename=filename)

template_global装饰使得所有可用模板的功能。代替url_for需要静态文件的URL时使用它。

可能已经有一个Flask扩展程序可以为您执行此操作。例如,Flask-S3提供了一个服务url_for,用于提供来自AWS S3的静态文件

Python 2022/1/1 18:29:14 有546人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶