python - 如何从 App Engine 中的 Google Cloud Storage 动态加载 Jinja2 模板?

标签 python google-app-engine flask google-cloud-platform jinja2

我在 App Engine 上有一个应用程序,并且希望以一种无需重新部署整个应用程序即可动态更新它们的方式部署 Jinja2 模板。

理想情况下,它们将存储在 Google Cloud Storage 中,这样我只需替换存储桶中的模板文件即可立即由实时应用程序使用。但是,Flask 似乎要求模板位于应用程序本地。

这可能吗?

最佳答案

这可以通过针对每个请求直接从 Google Cloud Storage 加载每个模板并使用 render_template_string 来实现。 Flask 中的函数。

例如,如果您的模板文件 hello.html 如下所示:

<h1>Hello {{ name }}!</h1>

将 Google Cloud Storage 资源添加到您的应用中,创建一个新存储桶(我们将其称为 your-bucket),然后将此文件上传到该存储桶。

在您的requirements.txt中:

flask
google-cloud-storage

在你的main.py中:

from flask import Flask, render_template_string
from google.cloud import storage

app = Flask(__name__)

# Initialize the bucket you created containing the templates
bucket = storage.Client().bucket('your-bucket')

@app.route('/')
def hello():
    # Load the template string from Cloud Storage
    template_string = bucket.blob('hello.html').download_as_string().decode('ascii')

    # Now use render_template_string the same way you'd use render_template
    return render_template_string(template_string, name='World')

请注意,由于此应用程序会为每个请求重新下载模板,因此对于高流量应用程序,可能会产生大量额外的请求时间和成本。

因此,最好以某种方式“缓存”模板字符串(例如,通过 Cloud Memorystore ),然后使用 Object Change Notification (可能通过 Google Cloud Function trigger )确定存储桶中的文件何时发生更改,并更新缓存。

关于python - 如何从 App Engine 中的 Google Cloud Storage 动态加载 Jinja2 模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52174695/

相关文章:

python - gensim 的 'docvecs' 是什么?

Python eve 分页请求和更新请求

python - 修改 Flask-Login @Login_Required 装饰器

javascript - Google App Engine 云端点 : OAuth2 won't work. 无法加载 api

python - GAE 应用程序是否保留其发送的电子邮件的日志?

Python 错误 - 无法重定向设置的 url

mysql - Heroku 托管带有 MySQL 抛出错误的 Flask 应用程序

python - 如何使用 jsonify 和 Flask 在 JSON 响应中使用单个反斜杠?

Python 列表变成字典?

java - 使用 Mapreduce for Java Appengine 计算唯一用户数