app.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. from flask import Flask
  2. from flask.logging import default_handler
  3. from flask_login import LoginManager
  4. import configure
  5. from . import home
  6. from . import test
  7. from . import user
  8. import logging.handlers
  9. import logging
  10. import os
  11. import sys
  12. class HEnglishFlask(Flask):
  13. def __init__(self, import_name, **kwargs):
  14. super().__init__(import_name, **kwargs)
  15. self.logger: logging.Logger
  16. self.logger.removeHandler(default_handler)
  17. self.logger.propagate = False
  18. self.logger.setLevel({"DEBUG": logging.DEBUG,
  19. "INFO": logging.INFO,
  20. "WARNING": logging.WARNING,
  21. "ERROR": logging.ERROR}.get(configure.conf["LOG_LEVEL"], logging.INFO))
  22. if len(configure.conf["LOG_HOME"]):
  23. handle = logging.handlers.TimedRotatingFileHandler(
  24. os.path.join(configure.conf["LOG_HOME"], f"flask-{os.getpid()}.log"))
  25. handle.setFormatter(logging.Formatter("%(levelname)s:%(name)s:%(asctime)s "
  26. "(%(filename)s:%(lineno)d %(funcName)s) "
  27. "%(process)d %(thread)d "
  28. "%(message)s"))
  29. self.logger.addHandler(handle)
  30. if configure.conf["LOG_STDERR"]:
  31. handle = logging.StreamHandler(sys.stderr)
  32. handle.setFormatter(logging.Formatter("%(levelname)s:%(name)s:%(asctime)s "
  33. "(%(filename)s:%(lineno)d %(funcName)s) "
  34. "%(process)d %(thread)d "
  35. "%(message)s"))
  36. self.logger.addHandler(handle)
  37. self.update_config()
  38. self.login_manager = LoginManager()
  39. self.login_manager.init_app(self)
  40. self.login_manager.anonymous_user = user.AnonymousUser # 设置未登录的匿名对象
  41. @self.context_processor
  42. def inject_base():
  43. return {"title": self.config["TITLE"],
  44. "about": self.config["ABOUT"]}
  45. @self.login_manager.user_loader
  46. def user_loader(name: str):
  47. return user.load_user(name, None)
  48. self.register_blueprint(home.home, url_prefix="/")
  49. self.register_blueprint(test.test, url_prefix="/test")
  50. def update_config(self):
  51. self.config.update(configure.conf)
  52. self.logger.info("Update config")