__init__.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. from flask import Flask
  2. from flask_sqlalchemy import SQLAlchemy
  3. from flask_restx import Api
  4. from app.utils.log_config import LogConfig
  5. # 初始化扩展,但不绑定到应用实例
  6. db = SQLAlchemy()
  7. log_config = LogConfig()
  8. def create_app(config_object=None):
  9. app = Flask(__name__, instance_relative_config=True)
  10. # 默认配置
  11. app.config['SECRET_KEY'] = 'a-very-secret-key'
  12. app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///./tasks.db'
  13. app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
  14. if config_object:
  15. app.config.from_object(config_object)
  16. # 初始化扩展
  17. db.init_app(app)
  18. log_config.init_app(app)
  19. # 创建 Flask-RESTX API 实例(加入全局 Bearer Token 安全定义以启用 Swagger Authorize 按钮)
  20. authorizations = {
  21. 'BearerAuth': {
  22. 'type': 'apiKey',
  23. 'in': 'header',
  24. 'name': 'Authorization',
  25. 'description': '在此处输入: Bearer <token>'
  26. }
  27. }
  28. api = Api(
  29. app,
  30. version='1.0',
  31. title='Task API',
  32. description='A simple Task API with Spring MVC style layers',
  33. authorizations=authorizations,
  34. security='BearerAuth'
  35. )
  36. # 导入并注册控制器(命名空间)
  37. from app.controller import task_controller, auth_controller, lovelace_url_controller, user_room_controller
  38. api.add_namespace(task_controller.api, path='/api/v1/tasks')
  39. api.add_namespace(auth_controller.api, path='/api/v1/auth')
  40. api.add_namespace(lovelace_url_controller.api, path='/api/v1/lovelace')
  41. api.add_namespace(user_room_controller.api, path='/api/v1/user-room')
  42. # 注册全局错误处理器
  43. from app.utils.error_handler import register_error_handlers
  44. register_error_handlers(app)
  45. # 在应用上下文中创建数据库表
  46. with app.app_context():
  47. db.create_all()
  48. return app