[Flask] json 데이터를 CSRF 사용하여 Ajax POST 방식으로 넘길 때 400 Bad Request 발생할 경우

  1. 8~10 line : error_handler 설정 필수
    (설정하지 않을 경우, 400 Bad Request 발생) – 아직 정확한 이유는 모르겠음
  2. 20 line : request.get_json()
    (request.form[‘data_key’] 로 접근할 경우 400 Bad Request 발생)

위 2가지 사항이 준수되어야 POST 방식의 Ajax 가 원활히 작동된다.

CSRF 프로텍션을 가동시킨 후 json 데이터를 Ajax POST 방식으로 넘겨서 request.form[‘data_key’]로 값을 받아오려하자 계속 브라우저에서 서버가 이해할 수 없는 요청을 보냈다며 400 Bad Request 발생되어 약 2시간가량 붙잡고 있었다.

아무리 구글에서 검색을 하고 최신 버전의 Flask Document를 찾아봐도 기본 예제들 뿐이었고(대부분이 전송 자체에만 포커스를 맞춰 작성된 글이었다.) Python 뉴비인 나는 헤매기 딱 좋은 조건이었다.

그러던 중 json 데이터를 받는 메소드(예, ajax_post())에서 모든 코드를 주석처리하고 단순히 ‘A’를 출력하는
print ‘A’
명령을 입력하자 거짓말 같이 200 Response 가 떴다.

결국 데이터를 받아오는 쪽에서 문제가 발견했다는 것을 깨닫고 좀 더 구글링하자 get_json() 메소드를 알게되어 변경했더니 유레카!

 

이와 같은 문제로 머리 아픈 다른 사람들이 있다면
부디 이 포스팅을 보고 나 같이 허무하게 시간 낭비하지 않길 바라며 글 작성한다.