diff --git a/.flaskenv b/.flaskenv index 721d9f047bc213a9f64ae7e2507f1aef93fddd7b..d6ee161623075844ad089030fa00a10113648033 100644 --- a/.flaskenv +++ b/.flaskenv @@ -1,5 +1,5 @@ # flask配置 -FLASK_APP=app.py +FLASK_APP="applications:create_app('development')" FLASK_ENV=development FLASK_DEBUG=1 FLASK_RUN_HOST = 127.0.0.1 diff --git a/applications/extensions/__init__.py b/applications/extensions/__init__.py index 2e7e1086ebadfb551a787308fc96765c860d745f..d5b6f3414dde63e0b7de967471019ef6c5b097a5 100644 --- a/applications/extensions/__init__.py +++ b/applications/extensions/__init__.py @@ -9,6 +9,7 @@ from .init_mail import init_mail from .init_apscheduler import init_scheduler from .init_upload import init_upload from .init_dotenv import init_dotenv +from .init_limiter import init_limiter def init_plugs(app: Flask) -> None: @@ -21,3 +22,4 @@ def init_plugs(app: Flask) -> None: init_scheduler(app) init_upload(app) init_dotenv() + init_limiter(app) diff --git a/applications/extensions/init_error_views.py b/applications/extensions/init_error_views.py index b68497d54c7e86644769ff5777c5071a758c1165..a66917a497391baeb5445985f07a23265525fe79 100644 --- a/applications/extensions/init_error_views.py +++ b/applications/extensions/init_error_views.py @@ -14,6 +14,10 @@ def init_error_views(app): def internal_server_error(e): return render_template('errors/500.html'), 500 + @app.errorhandler(429) + def handle_429_error(e): + return render_template('errors/429.html') + # Return validation errors as JSON @app.errorhandler(422) @app.errorhandler(400) diff --git a/applications/extensions/init_limiter.py b/applications/extensions/init_limiter.py new file mode 100644 index 0000000000000000000000000000000000000000..33f8b2ea6e307d5e3501cd9795ee3dae00171858 --- /dev/null +++ b/applications/extensions/init_limiter.py @@ -0,0 +1,16 @@ +from flask import Flask +from flask_limiter import Limiter +from flask import request + + +def limit_key_func(): + return str(request.headers.get("X-Forwarded-For", '127.0.0.1')) + + +def init_limiter(app: Flask): + limiter = Limiter( + app, + key_func=limit_key_func, + # 每天200次,一小时50次 + default_limits=["200 per day", "50 per hour"] + ) diff --git a/templates/errors/429.html b/templates/errors/429.html new file mode 100644 index 0000000000000000000000000000000000000000..c74e7902bf3be40866e3efd21b851b2c982b872b --- /dev/null +++ b/templates/errors/429.html @@ -0,0 +1,19 @@ + + + + + + + + + +
+ +
+

429

+

你已触碰到了我的底线,不要在访问了,把你ip封了

+ 回到首页 +
+
+ +