werkzeug.exceptions.BadRequestKeyError 오류 해결

mason.98·2021년 11월 19일
0

알쓸코잡

목록 보기
2/17

flask를 통해 웹페이지 구축 중 만난 오류!

form태그에서 POST형식으로 값을 보내면 뜨는 오류였다.
검색해보니 서버(flask)에서 받아들여야하는 POST 파라미터가 없을 때 발생한다고 한다.


📝Python (기존)

@bp.route('/check/', methods=['POST', 'GET'])
@login_required
def check():
    if request.method == 'POST':
        file = request.files["file"]
        file.save('./static/ocr_img/'+secure_filename(file.filename))
        path = 'C:/projects/blogproject/static/ocr_img/'+file.filename
        output = ocr.kakao_ocr(path, appkey).json() 
        return render_template('ocr/ocr_main.html', output=output)

1. 📝Python, files->form 변경
python file = request.form["file"] 으로 바꿔봤는데 실패

2. 📝Python, False 추가
python file = request.files["file", False] 으로 바꿔봤는데 실패


📝Html (기존)

<form id="ocr_form" action="{{ url_for('ocr.check') }}" method="POST"
      enctype="multipart/form-data">
  <input type="text" class="upload-name" value="이미지를 업로드 하세요"
         placeholder="이미지를 업로드 하세요" disabled >
  <label for="file">파일찾기</label>
  <input type="file" id="file">
</form>
<label for="ocr_submit">변환하기</label>
<input id="ocr_submit" form="ocr_form" type="submit">

나 같은 경우에는 POST 값 전달을 form태그 밖에서 하고 싶었기 때문에 위와 같이 코드를 작성하였다. 뭐가 틀렸는지 모르고 검색 중에 드디어 찾았다!


(해결!) 📝Html, name 추가

업로드된 File이 저장되는 부분은 form 태그 안에 input type="file" 부분이다.
Python에서 file = request.files["file"]부분에
"file"은 input type="file"의 id가 아니라 name을 통해 전달 받는다.


📝Python (해결)

file = request.files["여기"]

📝Html (해결)

<form id="ocr_form" action="#" method="POST"enctype="multipart/form-data">
  <input type="text" class="upload-name" disabled >
  <label for="file">파일찾기</label>
  <input type="file" id="file" name="여기">
</form>
<label for="ocr_submit">변환하기</label>
<input id="ocr_submit" form="ocr_form" type="submit">

따라서 업로드된 File이 저장되는 input type="file"name="file"을 추가한다.
한글로 여기! 라고 적어둔 곳을 똑같이 적어주면 된다! 끝

profile
wannabe---ing

0개의 댓글