일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- Python
- Windows
- pytorch
- LLM
- Converting
- Paper
- CUDA
- pandas
- format
- Laravel
- TORCH
- Flask
- judge
- enV
- git
- PostgreSQL
- Mac
- evaluation
- DB
- Package
- Linux
- AI
- docker
- list
- KAKAO
- numpy
- Database
- GitLab
- Container
- file
Archives
- Today
- Total
Daily Develope
[FLASK] request 정리 본문
flask에서 데이터 읽기
사용자가 데이터를 싣어보내는 방법이 다양하기에, 규격(유형)에 맞는 데이터 읽기 방법을 구현해야한다.
샘플코드
- Get 요청 : request.args 로 데이터 전달
- Post 요청 : request.form 으로 데이터 전달
- 입력 유형(format)에 따라 데이터 구분 가능 (request.content_type)
from flask import request
#...
@sample.route('/', methods=['GET', 'POST'])
def sampleAPI():
# ...
contentType = request.content_type # 또는 contentType = request.headers.get('Content-Type')
args = None
if request.method == "GET":
args = request.args
elif request.method == "POST":
try:
# form
if contentType == "application/x-www-form-urlencoded":
args:dict = request.form
# json
elif contentType == "application/json":
args:dict = request.json
else:
print("not supported content-type")
except:
print("bad request")
data1 = args.get('data1')
data2 = args.get('data2')
# ...
데이터 유형별 Flask의 request 데이터 포맷
request.args : URL 문자열 쿼리에 정의된 키/값 쌍의 데이터를 읽는 경우 사용
request.form : HTML POST 요청 Body 속 키/값 쌍이나, JSON으로 인코딩되지 않은 JavaScript 요청의 데이터를 읽는 경우 사용
request.files : HTML POST 요청 Body 속 파일이며, enctype=multipart/form-data 이거나 업로드가 불필요한 파일인 경우 사용
request.values : args와 form이 복합적으로 사용된 데이터를 읽는 경우 사용
request.json : contentType이 application/json으로 정의된, JSON 데이터를 읽는 경우 사용
참고) curl 요청 예시
# args 요청
curl -X GET http://mydomain.com?data1=value1&data2=value2
# form 요청
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "data1"="value1" -d "data2"="value2" http://mydomain.com
# json 요청
curl -X POST -H "Content-Type: application/json" -d '{"data1":"value1","data2":"value2"}' http://mydomain.com
데이터 전송 종류별 읽는 방법
1. Path
용도 : 세부 데이터 분류를 지정하기 위해 주로 사용
유형 : Flask의 route 주소
정보 참조 가능
# 사용 예 (특정 회원의 정보 조회)
http://mydomain.com/{user_id}/info
2. Query
용도 : URL에 데이터 이름과 값을 실어 보낸다 (데이터가 노출되기에 공개 가능한 간단한 정보를 실어보내는 용도에 적합)
유형 : request.args
를 사용해 데이터 읽기 가능
# 아래 예시와 같이 데이터가 들어오는 경우
curl -X GET http://mydomain.com?data1=value1&data2=value2
3. Body
용도 : 개인정보 등 보안상 노출되면 안되는 정보를 전달을 위해 주로 사용
유형 : JSON 이외의 유형, request.form
을 사용해 데이터 읽기 가능
# 아래 예시와 같이 데이터가 들어오는 경우
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "data1"="value1" -d "data2"="value2" http://mydomain.com
유형 : JSON 데이터, request.json
을 사용해 데이터 읽기 가능
# 아래 예시와 같이 데이터가 들어오는 경우
curl -X POST -H "Content-Type: application/json" -d '{"data1":"value1","data2":"value2"}' http://mydomain.com
Error Handling
request.json 호출시, body에서 json 데이터를 찾을 수 없다는 예외(Exception)가 발생하는 경우
request.json 데이터가 존재하는지 확인하기 위해서 get_json() method를 사용해 데이터 읽도록 구현 - 참조
args = request.get_json(silent=True, cache=False)
if args:
# processing to get data
...
'Develope > Web' 카테고리의 다른 글
[Request] Content-Type의 데이터별 http 요청(requests) 코드 예제 (0) | 2022.11.07 |
---|---|
[HTTP] 응답 상태코드 (response status code) (0) | 2022.08.17 |
[WEB] TODO - RestAPI 정리 (0) | 2022.08.08 |
[Laravel] Directory 구조 정리 (version 9.x) (0) | 2022.04.22 |
[Laravel] Configuration 환경설정 정리 (0) | 2022.04.21 |