|
2 | 2 | :copyright: © 2020 by the Lin team. |
3 | 3 | :license: MIT, see LICENSE for more details. |
4 | 4 | """ |
| 5 | + |
| 6 | +from dotenv import load_dotenv |
| 7 | +from flask import Flask |
| 8 | + |
| 9 | + |
| 10 | +def register_blueprints(app): |
| 11 | + from app.api.cms import create_cms |
| 12 | + from app.api.v1 import create_v1 |
| 13 | + |
| 14 | + app.register_blueprint(create_v1(), url_prefix="/v1") |
| 15 | + app.register_blueprint(create_cms(), url_prefix="/cms") |
| 16 | + |
| 17 | + |
| 18 | +def register_api(app): |
| 19 | + from lin.apidoc import api |
| 20 | + |
| 21 | + api.register(app) |
| 22 | + |
| 23 | + |
| 24 | +def apply_cors(app): |
| 25 | + from flask_cors import CORS |
| 26 | + |
| 27 | + CORS(app) |
| 28 | + |
| 29 | + |
| 30 | +def load_app_config(app): |
| 31 | + """ |
| 32 | + 根据指定配置环境自动加载对应环境变量和配置类到app config |
| 33 | + """ |
| 34 | + # 根据传入环境加载对应配置 |
| 35 | + env = app.config.get("ENV") |
| 36 | + # 读取 .env |
| 37 | + load_dotenv(".{env}.env".format(env=env)) |
| 38 | + # 读取配置类 |
| 39 | + app.config.from_object( |
| 40 | + "app.config.{env}.{Env}Config".format(env=env, Env=env.capitalize()) |
| 41 | + ) |
| 42 | + |
| 43 | + |
| 44 | +def set_global_config(**kwargs): |
| 45 | + from lin.config import global_config |
| 46 | + |
| 47 | + # 获取config_*参数对象并挂载到脱离上下文的global config |
| 48 | + for k, v in kwargs.items(): |
| 49 | + if k.startswith("config_"): |
| 50 | + global_config[k[7:]] = v |
| 51 | + |
| 52 | + |
| 53 | +def create_app(register_all=True, **kwargs): |
| 54 | + # http wsgi server托管启动需指定读取环境配置 |
| 55 | + load_dotenv(".flaskenv") |
| 56 | + app = Flask(__name__, static_folder="../assets") |
| 57 | + load_app_config(app) |
| 58 | + if register_all: |
| 59 | + from lin import Lin |
| 60 | + |
| 61 | + set_global_config(**kwargs) |
| 62 | + register_blueprints(app) |
| 63 | + register_api(app) |
| 64 | + apply_cors(app) |
| 65 | + Lin(app, **kwargs) |
| 66 | + return app |
0 commit comments