Ich folge diesem Beispiel:Python Rate Limit Klasse basiert Ansicht Flask
http://flask-limiter.readthedocs.org/en/stable/#ratelimit-string
app = Flask(__name__)
limiter = Limiter(app, key_func=get_remote_address)
class MyView(flask.views.MethodView):
decorators = [limiter.limit("10/second")]
def get(self):
return "get"
def put(self):
return "put"
Mein Problem ist, dass in beispielsweise die Anwendung, Limiter und Klassen in der gleichen Datei definiert sind, in meinem Falls die Anwendung und der Begrenzer in derselben Datei definiert sind, leben meine Klassen in einer separaten Datei.
Wenn ich entweder Limiter oder App importiere, fängt meine Flask App nicht an, weil zirkulär dependencies. Wie kann das behoben werden, was ist der empfohlene Weg? Ich möchte den Begrenzer auf bestimmte Endpunkte anwenden. Ich versuchte from flask import current_app
, um Begrenzer zu initialisieren, aber diese Funktion wurde nicht als gültiger Parameter genommen. Irgendwelche Empfehlungen?
Datei-Information:
- app.py
- api_main.py
Unter app.py ich meine Ressourcen definiert haben:
api_app = Flask(__name__) # Flask Application
api_app.config.from_pyfile("../../../conf/settings.py") # Flask configuration
imbue_api = restful.Api(api_app) # Define API
limiter = Limiter(api_app, key_func=get_remote_address, global_limits=["10 per second"])
imbue_api.add_resource(ApiBase, settings.BASE_API_URL)
In api_main. py Ich habe alle meine Klassen definiert:
class ApiBase(Resource):
@authenticator.requires_auth
def get(self):
"""
:return:
"""
try:
# =========================================================
# GET API
# =========================================================
log.info(request.remote_addr + ' ' + request.__repr__())
if request.headers['Content-Type'] == 'application/json':
# =========================================================
# Send API version information
# =========================================================
log.info('api() | GET | Version' + settings.api_version)
response = json.dumps('version: ' + settings.api_version)
resp = Response(response, status=200, mimetype='application/json')
return resp
except KeyError:
response = json.dumps('Invalid type headers. Use application/json')
resp = Response(response, status=415, mimetype='application/json')
return resp
except Exception, exception:
log.exception(exception.__repr__())
response = json.dumps('Internal Server Error')
resp = Response(response, status=500, mimetype='application/json')
return resp