Flask框架中实现多域名路由的Blueprint配置指南
2025-04-29 17:48:49作者:盛欣凯Ernestine
在Flask应用开发中,有时我们需要让同一个应用服务于多个不同的域名,同时保持不同域名下的路由逻辑分离。本文将详细介绍如何利用Flask的Blueprint功能实现这一需求。
需求场景分析
假设我们有以下典型需求:
- 应用需要同时服务于example.org和somesite.com两个域名
- 部分路由仅对example.org开放
- 部分路由仅对somesite.com开放
- 大部分路由对两个域名都开放
基础配置方法
要实现多域名路由,首先需要在Flask应用初始化时启用host_matching功能:
app = Flask(__name__, host_matching=True)
注意不要设置static_host参数,这会导致所有路由失效。SERVER_NAME配置项在此场景下也不需要特别设置。
Blueprint分组策略
我们可以将路由分为三类,分别创建对应的Blueprint:
# 仅对第一个域名开放的蓝图
domain_a_bp = Blueprint('domain_a', __name__)
# 仅对第二个域名开放的蓝图
domain_b_bp = Blueprint('domain_b', __name__)
# 对两个域名都开放的共享蓝图
shared_bp = Blueprint('shared', __name__)
路由注册实现
在注册Blueprint时,通过host参数指定适用的域名:
# 注册仅适用于第一个域名的蓝图
app.register_blueprint(domain_a_bp, host="example.org")
# 注册仅适用于第二个域名的蓝图
app.register_blueprint(domain_b_bp, host="somesite.com")
# 注册共享蓝图(不指定host参数)
app.register_blueprint(shared_bp)
完整示例代码
以下是一个完整的实现示例:
from flask import Blueprint, Flask
def create_app():
app = Flask(__name__, host_matching=True)
# 创建三个蓝图
a_bp = Blueprint('a', __name__)
b_bp = Blueprint('b', __name__)
shared_bp = Blueprint('shared', __name__)
# 添加路由
@a_bp.route('/')
def a_home():
return "仅对example.org开放的首页"
@b_bp.route('/')
def b_home():
return "仅对somesite.com开放的首页"
@shared_bp.route('/about')
def about():
return "两个域名共享的关于页面"
# 注册蓝图
app.register_blueprint(a_bp, host="example.org")
app.register_blueprint(b_bp, host="somesite.com")
app.register_blueprint(shared_bp)
return app
测试与验证
测试时需要注意:
- 确保测试环境能正确解析配置的域名
- 通过不同域名访问验证路由是否正确响应
- 共享路由应能通过所有配置的域名访问
常见问题解决
- 所有路由返回404:检查是否误设了
static_host参数 - 域名路由混淆:确保host参数值完全匹配域名
- 共享路由无法访问:检查是否未指定host参数注册共享蓝图
通过这种Blueprint分组方式,我们可以优雅地实现多域名路由管理,保持代码结构清晰,同时避免在每个路由中重复检查域名逻辑。
登录后查看全文
热门项目推荐
相关项目推荐
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
GLM-4.7-FlashGLM-4.7-Flash 是一款 30B-A3B MoE 模型。作为 30B 级别中的佼佼者,GLM-4.7-Flash 为追求性能与效率平衡的轻量化部署提供了全新选择。Jinja00
new-apiAI模型聚合管理中转分发系统,一个应用管理您的所有AI模型,支持将多种大模型转为统一格式调用,支持OpenAI、Claude、Gemini等格式,可供个人或者企业内部管理与分发渠道使用。🍥 A Unified AI Model Management & Distribution System. Aggregate all your LLMs into one app and access them via an OpenAI-compatible API, with native support for Claude (Messages) and Gemini formats.JavaScript01
idea-claude-code-gui一个功能强大的 IntelliJ IDEA 插件,为开发者提供 Claude Code 和 OpenAI Codex 双 AI 工具的可视化操作界面,让 AI 辅助编程变得更加高效和直观。Java01
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin07
compass-metrics-modelMetrics model project for the OSS CompassPython00
最新内容推荐
项目优选
收起
deepin linux kernel
C
27
11
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
519
3.69 K
暂无简介
Dart
760
182
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
67
20
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
875
569
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
12
1
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
334
160
方舟分析器:面向ArkTS语言的静态程序分析框架
TypeScript
169
53
Ascend Extension for PyTorch
Python
321
373
React Native鸿蒙化仓库
JavaScript
301
347