def create_app(config_class=Config): app = Flask(__name__) app.config.from_object(config_class) db.init_app(app) login_manager.init_app(app) from app import routes app.register_blueprint(routes.bp) return app
时间: 2025-06-27 19:09:10 浏览: 9
### Flask `create_app` 函数示例及 App 配置初始化方法
在 Flask 中,通常会使用工厂模式来创建应用程序实例。这种设计模式允许我们在不同的环境中灵活地配置和初始化应用。以下是关于如何实现 `create_app` 工厂函数及其配置初始化的具体说明。
#### 1. 定义 `create_app` 工厂函数
`create_app` 是一个常见的工厂函数名称,用于动态创建并返回 Flask 应用实例。它可以根据传入的不同参数加载相应的配置文件或环境变量[^1]。
```python
from flask import Flask
from flask_cors import CORS
from common.utils.jwt_auth import jwt_authentication
from models import db
from views.user import user_bp
def create_flask_app(config_info):
# 创建 Flask 应用实例
app = Flask(__name__)
# 加载配置信息
app.config.from_object(config_info)
# 注册蓝图模块
app.register_blueprint(user_bp)
# 数据库初始化
db.init_app(app)
# 跨域支持
CORS(app)
# 请求钩子:JWT 认证
app.before_request(jwt_authentication)
return app
```
上述代码展示了如何通过 `config_info` 参数传递配置类,并完成以下功能:
- **加载配置**:调用 `app.config.from_object()` 方法从指定的对象中读取配置项。
- **注册蓝图**:将视图逻辑封装到蓝图中并通过 `register_blueprint()` 进行挂载。
- **数据库初始化**:利用 SQLAlchemy 的 `db.init_app()` 将 ORM 绑定至当前应用。
- **跨域处理**:引入 `CORS` 扩展解决前后端分离中的跨域问题。
- **请求拦截器**:通过 `before_request` 添加全局认证机制。
---
#### 2. 配置管理与初始化
Flask 支持多种方式加载配置数据,最常见的是基于 Python 类的方式。下面是一个典型的配置类定义:
```python
class Config:
DEBUG = False
TESTING = False
SECRET_KEY = 'your_secret_key'
SQLALCHEMY_DATABASE_URI = 'sqlite:///example.db'
class DevelopmentConfig(Config):
DEBUG = True
class ProductionConfig(Config):
DEBUG = False
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://user:password@localhost/db_name'
```
这些配置可以被 `create_flask_app` 动态加载。例如,在开发环境下可使用 `DevelopmentConfig`,而在生产环境中切换为 `ProductionConfig`。
---
#### 3. 启动脚本 (`main.py`)
为了方便运行应用,可以在入口文件中调用 `create_flask_app` 并启动服务。以下是一份完整的 `main.py` 实现:
```python
from factory import create_flask_app
if __name__ == '__main__':
config_class = 'config.DevelopmentConfig' # 或者其他配置路径
app = create_flask_app(config_class)
app.run()
```
这里需要注意,如果配置位于独立的模块(如 `config.py`),则需提供完整导入路径以便正确解析[^2]。
---
#### 4. 测试简单路由
除了核心框架结构外,还可以测试一些基础的功能以验证应用是否正常工作。比如添加一条简单的 `/hello` 路由[^3]:
```python
@app.route('/hello')
def hello():
return {'message': 'Hello, world!'}
```
当访问该地址时,应返回 JSON 响应 `{ "message": "Hello, world!" }`。
---
#### 总结
以上内容涵盖了 Flask 应用的核心构建流程,包括但不限于工厂函数的设计、多环境下的配置管理和基本的服务启动逻辑。此架构具有良好的扩展性和维护性,适合中小型项目的快速开发需求。
---
阅读全文
相关推荐


















