본문 바로가기
개발&코딩/Flask

크롤링 사이트 만드는 도중 발생한 Bad Request Error // flask, crawling, bad request

by 우동이 2022. 8. 17.
300x250

작업 환경 : Visual Studio Code

버전 : Python 3.10.2 | flask 2.1.3

 

flask로 작성 중이고

 

 


templates/index.html

더보기
<!-- templates/index.html-->
<!doctype html>
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- Bootstrap CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
    <link rel="stylesheet", href="{{ url_for("static", filename="css/index_css.css")}}">
    <title>Hello, world!</title>
  </head>
  <body>
    <div id="wrap">
        <form action="/result" methods="POST">
            <div class="mb-3">
                <label for="exampleInputEmail1" class="form-label">크롤링할 키워드</label>
                <input type="text" class="form-control" name="input1" placeholder="키워드을 입력하세요">
            </div>

            <div class="mb-3">
                <label for="exampleInputPassword1" class="form-label">페이지수</label>
                <input type="number" class="form-control" name="input2" placeholder="페이지수를 입력하세요">
            </div>

            <button type="submit" class="btn btn-primary">Submit</button>
        </form>
    </div>
  </body>
</html>

 

템플릿에서 메인이 될 index.html은 부트 스트랩을 사용해 크롤링할 키워드와 페이지수를 입력받는

<input> 태그 두 개를 각각 input1, input2 이름을 주어 <form> 태그를 통해 /result로 보냅니다.

POST로요

 


app.py

더보기
from flask import Flask, render_template, request

app = Flask(__name__)

@app.route('/')
def hello():
    return render_template('index.html')

@app.route('/result', methods=['GET','POST'])
def result():
    print(request.form['input1'])
    print(request.form['input2'])

    return render_template("result.html")

if __name__ == "__main__":
    app.run(debug=True)

flask 서버 코드입니다.

분명 request.form으로 input1, input2 폼 태그를 받아오는 게 맞게 작성된 것 같은데

 

/index.html

 

/index에서 값을 <input> 태그에 전달해 /result로 이동하는 순간

 

 

BadRequestKeyError가 발생합니다.

게다가 app.py에서 POST 방식만을 작성해줬는데

@app.route('/result', methods=['POST'])

이렇게 작성하면

 

 

아예 URL 비허용 메시지가 나옵니다.

뭔가...... 문제인 거 같은데... 뭐가 문제인 걸까요...

 

 

 

무엇보다 값이 넘어가지를 않는 게 제일 어렵습니다.

폼 태그랑 넘겨주는 request.form의 이름값이 동일하게 작성된 상태인데,,

해결하면 추가로 작성하겠습니다.

 

300x250

댓글