diff --git a/common/extend/cache.py b/common/extend/cache.py new file mode 100644 index 0000000..1a0febd --- /dev/null +++ b/common/extend/cache.py @@ -0,0 +1,3 @@ +from cachelib import RedisCache + +cache = RedisCache() diff --git a/common/extend/celery.py b/common/extend/celery.py new file mode 100644 index 0000000..02f80cf --- /dev/null +++ b/common/extend/celery.py @@ -0,0 +1,18 @@ +from celery import Celery + +from entrance.config import celery as config +from entrance.config.celery import broker_url + +celery = Celery(__name__, broker=broker_url) + + +def register_celery(app): + celery.config_from_object(config) + + class ContextTask(celery.Task): + def __call__(self, *args, **kwargs): + with app.app_context(): + return self.run(*args, **kwargs) + + celery.Task = ContextTask + diff --git a/common/extend/limit.py b/common/extend/limit.py new file mode 100644 index 0000000..c055684 --- /dev/null +++ b/common/extend/limit.py @@ -0,0 +1,7 @@ +from flask_limiter import Limiter +from flask_limiter.util import get_remote_address + +limiter = Limiter( + key_func=get_remote_address, + default_limits=["200 per day", "50 per hour"] +) diff --git a/common/extend/logger.py b/common/extend/logger.py new file mode 100644 index 0000000..6073414 --- /dev/null +++ b/common/extend/logger.py @@ -0,0 +1,55 @@ +from logging.config import dictConfig + + +def config_logger(): + dictConfig( + { + "version": 1, + "disable_existing_loggers": False, + "formatters": { + "simple": {"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"} + }, + "handlers": { + "console": { + "class": "logging.StreamHandler", + "level": "DEBUG", + "formatter": "simple", + "stream": "ext://sys.stdout", + }, + "info_file_handler": { + "class": "logging.handlers.RotatingFileHandler", + "level": "INFO", + "formatter": "simple", + "filename": "logs/info.log", + "maxBytes": 10485760, + "backupCount": 50, + "encoding": "utf8", + }, + "error_file_handler": { + "class": "logging.handlers.RotatingFileHandler", + "level": "ERROR", + "formatter": "simple", + "filename": "logs/errors.log", + "maxBytes": 10485760, + "backupCount": 20, + "encoding": "utf8", + }, + "debug_file_handler": { + "class": "logging.handlers.RotatingFileHandler", + "level": "DEBUG", + "formatter": "simple", + "filename": "logs/debug.log", + "maxBytes": 10485760, + "backupCount": 50, + "encoding": "utf8", + }, + }, + "loggers": { + "my_module": {"level": "ERROR", "handlers": ["console"], "propagate": "no"} + }, + "root": { + "level": "DEBUG", + "handlers": ["error_file_handler", "debug_file_handler"], + }, + } + ) \ No newline at end of file diff --git a/entrance/extend/mail.py b/common/extend/mail.py similarity index 100% rename from entrance/extend/mail.py rename to common/extend/mail.py diff --git a/common/extend/migrate.py b/common/extend/migrate.py new file mode 100644 index 0000000..d6a949d --- /dev/null +++ b/common/extend/migrate.py @@ -0,0 +1,7 @@ +from flask_migrate import Migrate + +from common.extend.orm import db +# from entrance.models import model_lists + +migrate = Migrate(db=db, directory='entrance/migrations') + diff --git a/entrance/extend/orm.py b/common/extend/orm.py similarity index 100% rename from entrance/extend/orm.py rename to common/extend/orm.py diff --git a/common/utils/mail.py b/common/utils/mail.py index fbbab0a..182b9b5 100644 --- a/common/utils/mail.py +++ b/common/utils/mail.py @@ -1,7 +1,7 @@ from flask_mail import Message # send_mail(subject='title', recipients=['123@qq.com'], content='body') -from entrance.extend.mail import mail +from common.extend.mail import mail def send_mail(subject, recipients, content): diff --git a/entrance/__init__.py b/entrance/__init__.py index 2de3153..193daf6 100644 --- a/entrance/__init__.py +++ b/entrance/__init__.py @@ -1,15 +1,27 @@ from flask import Flask - -from entrance import config +import os +from common.extend.logger import config_logger from entrance.bps import sys, register_parent_bp - - from entrance.extensions import init_extensions def create_app(): + config_logger() app = Flask(__name__) - app.config.from_pyfile('config.py') + app.config.from_pyfile('config/config.py') register_parent_bp(app) init_extensions(app) + if os.environ.get('WERKZEUG_RUN_MAIN') == 'true': + print( + """ + + ___ _ _ _ ___ _ _ + | _ \___ __ _ _ _ /_\ __| |_ __ (_)_ _ | __| |__ _ __| |__ + | _/ -_) _` | '_| / _ \/ _` | ' \| | ' \ | _|| / _` (_-< / / + |_| \___\__,_|_| /_/ \_\__,_|_|_|_|_|_||_| |_| |_\__,_/__/_\_\\ + + + """ + ) + return app diff --git a/entrance/config/celery.py b/entrance/config/celery.py new file mode 100644 index 0000000..cdc998d --- /dev/null +++ b/entrance/config/celery.py @@ -0,0 +1,8 @@ +broker_url = 'redis://127.0.0.1:6379/1' +result_backend = 'rpc://' + +task_serializer = 'json' +result_serializer = 'json' +accept_content = ['json'] +timezone = 'Asia/Shanghai' +enable_utc = True \ No newline at end of file diff --git a/entrance/config.py b/entrance/config/config.py similarity index 100% rename from entrance/config.py rename to entrance/config/config.py diff --git a/entrance/extend/migrate.py b/entrance/extend/migrate.py deleted file mode 100644 index 44c3405..0000000 --- a/entrance/extend/migrate.py +++ /dev/null @@ -1,17 +0,0 @@ -from flask_migrate import Migrate - -from entrance.extend.orm import db -# from entrance.models import model_lists -from modules.sys.models.user_role import user_role -from modules.sys.models.role_power import role_power -from modules.sys.models.dict import DictType, DictData -from modules.sys.models.admin_log import AdminLog -from modules.sys.models.photo import Photo -from modules.sys.models.power import Power -from modules.sys.models.role import Role -from modules.sys.models.dept import Dept - -from modules.sys.models.user import User - -migrate = Migrate(db=db, directory='entrance/migrations') - diff --git a/entrance/extensions.py b/entrance/extensions.py index 7bff922..4fe838b 100644 --- a/entrance/extensions.py +++ b/entrance/extensions.py @@ -1,9 +1,13 @@ from flask import Flask -from entrance.extend.orm import db -from entrance.extend.migrate import migrate +from common.extend.celery import register_celery +from common.extend.limit import limiter +from common.extend.orm import db +from common.extend.migrate import migrate def init_extensions(app: Flask): db.init_app(app) migrate.init_app(app) + register_celery(app) + limiter.init_app(app) diff --git a/require/extra.txt b/require/extra.txt index ea6677a..8d30cf8 100644 --- a/require/extra.txt +++ b/require/extra.txt @@ -1 +1,2 @@ -Flask-Mail==0.9.1 \ No newline at end of file +Flask-Mail==0.9.1 +celery==5.2.3 \ No newline at end of file diff --git a/require/min.txt b/require/min.txt index 95d8211..519ff92 100644 --- a/require/min.txt +++ b/require/min.txt @@ -6,4 +6,6 @@ Flask-Migrate==3.1.0 flask-marshmallow==0.14.0 marshmallow-sqlalchemy==0.27.0 Flask-Login==0.5.0 -Pillow==9.0.0 \ No newline at end of file +Pillow==9.0.0 +flask-limiter-2.1 +cachelib-0.6.0 \ No newline at end of file