10

現在、作業中のアプリの 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
}
4

3 に答える 3

8

カスタム応答を abort() 関数に直接入れることができます。

abort(make_response("Integrity Error", 400))

または、エラーハンドラー関数に入れることもできます

@app.errorhandler(400)
def not_found(error):
resp = make_response("Integrity Error", 400)
return resp
于 2013-08-06T14:05:24.140 に答える