[오늘의 배움] 045 flask.request

이상민·2021년 2월 12일
2

[오늘의 배움]

목록 보기
48/70
post-thumbnail

1. flask.request

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


2. GET방식의 데이터 전달

GET방식은 POST방식과 달리 요청에 body를 갖지 않는다. GET방식으로 데이터를 전달하고자 할땐 URL을 통해 쿼리 스트링을 사용하거나 경로값을 사용해야한다

2-1. 쿼리 스트링

URL에서 끝에 ? 이후에 오는 데이터로 키/값 쌍을 이뤄 전달한다

# 예
/user?id=123
  • Flask에선 request.args나 request.values를 통해 접근할 수 있다
id = request.args.get('id')
# 또는
id = request.values.get('id')

2-2. 경로값

엔드포인트의 URL 뒤에 경로를 추가하여 데이터를 전달할 수도 있다

# 예
/user/123
  • Flask에선 엔드포인트 등록시에 패러미터로 지정해줄 수 있다
@app.route('/user/<int:id>')
def show_user(id):
    ...
  • url_for()로 URL 빌드 시 아래처럼 전달할 수 있다
url_for('user.show_user', id=user.id)
  • request 객체로 접근할 수도 있다. view_args는 view 함수로 전달된 인자들을 딕셔너리 형태로 반환한다.
id = request.view_args['id']

참고 :
https://ooeunz.tistory.com/43

profile
편하게 읽기 좋은 단위의 포스트를 추구하는 개발자입니다

0개의 댓글