根据子网域进行路由的Flask应用
我想将我的顶级域作为与我网站的不同部分相对应的各种子域的门户。example.com
应该路由到welcome.html
模板。eggs.example.com
应该转到该网站的“蛋”小节或应用程序。我将如何在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)
在本地运行时,您需要编辑计算机的主机文件(
/etc/hosts
在Unix上),以便它知道如何路由子域,因为这些域实际上并不存在于本地。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的文档Rule
将向您展示Flask的文档掩盖了路由可以做的很多事情(因为Werkzeug已经对其进行了充分的记录)。