Mam aplikację kolbową z połączeniami oczekującymi ładunku JSON. Przed każda rozmowa jest przetwarzane, mam 2-stopniową błędzie proces sprawdzania:Flask: Dekorator do weryfikacji JSON i JSON Schema
- twierdzą, że ładunek jest ważne JSON
- twierdzą, że ładunek JSON jest zgodny z określonym schematem
Która jest realizowany w następujący sposób:
@app.route('/activate', methods=['POST'])
def activate():
request_id = request.__hash__()
# Assert that the payload is a valid JSON
try:
input = request.json
except BadRequest, e:
msg = "payload must be a valid json"
return jsonify({"error": msg}), 400
# JSON Schema Validation
try:
validate(request.json, app.config['activate_schema'])
except ValidationError, e:
return jsonify({"error": e.message}), 400
Ponieważ kod ten jest powielany przez wiele połączeń, zastanawiam się, czy mogę elegancko przenieść go do dekoratora, coś w formof:
@validate_json
@validate_schema(schema=app.config['activate_schema'])
@app.route('/activate', methods=['POST'])
def activate():
....
Problemem jest to, że request
argument jest niejawny: Mogę odnosić się do niego wewnątrz funkcji, ale nie jest to parametr do niego. Dlatego nie jestem pewien, jak go użyć w dekoratorze.
Jak mogę zaimplementować sprawdzanie poprawności za pomocą dekoratorów Python?
Miałem nadzieję, że w tym celu znajdzie się biblioteka. Odpowiedź @ Martijna jest dość prosta, ale czy ktokolwiek o tym wie? –