Tôi hiện đang viết một API REST cho một ứng dụng tôi đang làm việc. Các ứng dụng được viết bằng python sử dụng bình. Tôi có những điều sau đây:Bình Python và thông báo lỗi khách hàng tùy chỉnh
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)
Việc xử lý lỗi trông như thế này:
@app.errorhandler(400)
def not_found(error):
return make_response(standard_response(None, 400, 'Bad request'), 400)
Tôi đang sử dụng lỗi 400 để chỉ cả một vấn đề với một mô hình SQLAlchemy validator và một hạn chế duy nhất khi ghi vào cơ sở dữ liệu và trong cả hai trường hợp, lỗi sau được gửi cho khách hàng:
{
"data": null,
"error": {
"msg": "Bad request",
"no": 400
},
"success": false
}
Có cách nào vẫn sử dụng hủy bỏ (400)) nhưng cũng đặt lỗi bằng cách nào đó để trình xử lý lỗi có thể xử lý thêm thông tin bổ sung cho đối tượng lỗi trong kết quả?
Tôi muốn nó được phù hợp hơn với:
{
"data": null,
"error": {
"msg": "(IntegrityError) duplicate key value violates unique constraint profile_email_key",
"no": 400
},
"success": false
}
Yup, đây là cái tôi đang tìm kiếm. Có cách nào để bắt lỗi không bị ràng buộc với một xử lý như một "bắt tất cả" vì vậy tôi có thể định dạng và xử lý cho khách hàng quá? – Asken
tải xuống. '@ app.errorhandler (Ngoại lệ)' – Asken
Make_response và standard_response đó không hoạt động đối với tôi. Nhưng điều này không: "def handle_sqlalchemy_error (err): return err.message, 400" –