ラズベリーパイを自宅で実行している小さなWebインターフェイスを作っています。これは、いくつかのWebページだけでなく、いくつかのREST APIもホストしています。Python Flask - jsonとhtmlの両方404エラー
私はFlaskを使用しており、インデックスとしては'/'
、残りのREST APIのルートは'/api/v1.0/tasks'
です。
@app.route('/')
def index():
return render_template('index.html')
@app.route('/gnodes/api/v1.0/tasks', methods=['GET'])
def get_tasks():
return jsonify({'tasks': tasks})
@app.route('/gnodes/api/v1.0/tasks/<int:task_id>', methods=['GET'])
def get_task(task_id):
task = [task for task in tasks if task['id'] == task_id]
if not task:
abort(404)
return jsonify({'task': task[0]})
しかし、abort(404)
は、通常のページの罰金であるHTMLのエラーページを返しますが、非既存のタスクが要求されたとき、私はJSONを返すように望んでいました。
だから私はのErrorHandlerを上書きしました:
@app.errorhandler(404)
def not_found(error):
return make_response(jsonify({'error': 'Not found'}), 404)
しかし、今、すべてのエラーではなく、唯一のAPIのエラーよりも、JSONを返します。
私の質問は、どのようにAPIに失敗したリクエストをjsonエラーを返すことができますが、他のエラーはデフォルトのhtmlエラーページですか?
@ cricket_007あの瞬間はグローバル変数ですが、後でデータベース内のタスクを探しているコードに置き換えられます。 –
失敗したAPI要求を処理するためのカスタムデコレータを作成する –
@TheOddlerどのようなタスクか、定義されている場所はこのコンテキストでは重要ではありません –