Flask는 요청 데이터를 파싱해서 request 전역 객체에 저장한다. 이를 통해 데이터에 접근 할 수 있다
request.args : URL 쿼리 스트링 안의 키/값 쌍
request.form : HTML POST 폼의 body 안의 키/값 쌍. 또는 JSON 인코딩이 아닌 자바스크립트 요청
request.files : Flask가 폼에서 분리해 가지고 있는 body 안의 파일. HTML 폼이 enctype=multipart/form-data를 사용해야 업로드됨
request.values : args와 form의 합체. 키 중복 시 args를 우선시함
request.json : 파싱된 JSON 데이터. 요청이 application/json content 타입이거나, request.get_json(force=True)를 사용해 content type을 무시할 수 있음
request.data : 플라스크가 처리하지 않는 Media Type으로 요청 데이터가 들어올 시 문자열로 저장. Fallback으로 사용됨
이외에도 여러 패러미터들이 있다
POST 방식에선 json을 제외하고 모두 MultiDict 인스턴스로 아래와 같이 값에 접근할 수 있다
request.form['name'] # 키 존재 여부를 알면 인덱싱 사용 가능
request.form.get('name') # 키가 존재하지 않을 수도 있다면 사용
request.form.getlist('name') # 키가 여러번 전송되고 값의 리스트를 원하면 사용
참고 :
https://stackoverflow.com/questions/10434599/get-the-data-received-in-a-flask-request
https://flask.palletsprojects.com/en/1.1.x/api/#flask.Request
GET방식은 POST방식과 달리 요청에 body를 갖지 않는다. GET방식으로 데이터를 전달하고자 할땐 URL을 통해 쿼리 스트링을 사용하거나 경로값을 사용해야한다
URL에서 끝에 ? 이후에 오는 데이터로 키/값 쌍을 이뤄 전달한다
# 예 /user?id=123
id = request.args.get('id')
# 또는
id = request.values.get('id')
엔드포인트의 URL 뒤에 경로를 추가하여 데이터를 전달할 수도 있다
# 예 /user/123
@app.route('/user/<int:id>')
def show_user(id):
...
url_for('user.show_user', id=user.id)
id = request.view_args['id']