В настоящее время я пишу REST API для приложения, над которым я работаю. Приложение написано на python, используя флягу. У меня есть следующее:
try:
_profile = profile(
name=request.json['name'],
password=profile.get_salted_password('blablabla'),
email=request.json['email'],
created_by=1,
last_updated_by=1
)
except AssertionError:
abort(400)
session = DatabaseEngine.getSession()
session.add(_profile)
try:
session.commit()
except IntegrityError:
abort(400)
Обработчик ошибок выглядит следующим образом:
@app.errorhandler(400)
def not_found(error):
return make_response(standard_response(None, 400, 'Bad request'), 400)
Я использую ошибку 400, чтобы обозначить как проблему с валидатором модели sqlalchemy и уникальным ограничением при записи в базу данных, и в обоих случаях клиенту посылается следующая ошибка:
{
"data": null,
"error": {
"msg": "Bad request",
"no": 400
},
"success": false
}
Есть ли способ по-прежнему использовать abort (400), но так или иначе установить ошибку, чтобы обработчик ошибок мог позаботиться о добавлении дополнительной информации для объекта ошибки в результате?
Я хотел бы, чтобы это соответствовало:
{
"data": null,
"error": {
"msg": "(IntegrityError) duplicate key value violates unique constraint profile_email_key",
"no": 400
},
"success": false
}