python - 基于子域路由的 Flask 应用程序

标签 python google-app-engine flask url-routing werkzeug

我希望将我的顶级域作为对应于我网站不同部分的各种子域的门户。 example.com 应该路由到 welcome.html 模板。 eggs.example.com 应该路由到站点的“eggs”子部分或应用程序。我如何在 Flask 中实现这一点?

最佳答案

@app.route()采用 subdomain 参数来指定路由匹配的子域。 Blueprint还采用 subdomain 参数来为蓝图中的所有路由设置子域匹配。

您必须将 app.config['SERVER_NAME'] 设置为基本域,以便 Flask 知道要匹配的内容。您还需要指定端口,除非您的应用在端口 80 或 443 上运行(即在生产环境中)。

从 Flask 1.0 开始,您还必须在创建应用程序对象时设置 subdomain_matching=True

from flask import Flask

app = Flask(__name__, subdomain_matching=True)
app.config['SERVER_NAME'] = "example.com:5000"

@app.route("/")
def index():
    return "example.com"

@app.route("/", subdomain="eggs")
def egg_index():
    return "eggs.example.com"
ham = Blueprint("ham", __name__, subdomain="ham")

@ham.route("/")
def index():
    return "ham.example.com"

app.register_blueprint(ham)

在本地运行时,您需要编辑计算机的主机文件(Unix 上的 /etc/hosts),以便它知道如何路由子域,因为域实际上并不存在于本地。

127.0.0.1 localhost example.com eggs.example.com ham.example.com

记得还是要在浏览器指定端口,http://example.com:5000, http://eggs.example.com:5000等.

同样,在部署到生产环境时,您需要配置 DNS,以便子域路由到与基本名称相同的主机,并配置 Web 服务器以将所有这些名称路由到应用。

记住,所有 Flask 路由实际上都是 werkzeug.routing.Rule 的实例.咨询Werkzeug's documentation for Rule将向您展示 Flask 的文档所掩盖的路由可以做的很多事情(因为 Werkzeug 已经很好地记录了它)。

关于python - 基于子域路由的 Flask 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7512698/

相关文章:

python - 如何为 np.random.uniform 生成种子?

google-app-engine - 如何设置全局 DeadlineExceededError 处理程序?

python - Flask URL路由编码问题

python - Flask-WTForms 如何覆盖单选字段的预验证

php - error_handlers 页面在部署时不显示

python - Twilo python Flask传递参数

Python、单元测试和模拟导入

python - 从linux中的 Pandas 数据框列中减去日期

python - 在 python 中运行 TFTP 客户端/库

ruby-on-rails - 在 Google Cloud App Engine 中托管 Rails App 并设置环境变量