· FastAPI에는 HTTP Request를 사용하는 두 가지 방법:
1. HTTP Request의 작은 요소 타입을 선언해서 사용한다.
- Path Parameters
- Query Parameters
- Headers
- Cookies
2. Request Object에 (통째로) 직접 접근해 사용한다.
· 이 글에서는 두 번째 방법 Request Object를 사용하는 방법에 대하여 다룬다.
· FastAPI는 내부적으로 Starlette를 사용하고 있고, 필요하다면 FastAPI 대신 Starlette의 Request Object를 직접 사용할 수 있다.
· 주의사항: Request Object를 직접 가져오면, FastAPI에 의해 유효성 검사와 문서화가 되지 않는다.
사용법
· path 연산 함수 파라미터에 Request 타입을 선언하면, FastAPI는 Request가 파라미터로 전달된걸 알게된다.
exam.py
from fastapi import FastAPI, Request
import uvicorn
app = FastAPI()
@app.get("/movies/{movie_id}")
def get_movie(movie_id: int, request: Request):
client_host = request.client.host
return {"client_host": client_host, "movie_id": movie_id}
if __name__ == "__main__":
uvicorn.run("exam:app")
위 코드를 실행하고, 브라우저에서 http://127.0.0.1:8000/movies/123 로 접속하면 아래와 같은 결과를 볼 수 있다.
· Request Object로 접근할 수 있는 요소:
- method
ex) request.method
- URL
ex) request.url
ex) request.url.path
ex) request.url.port
- Headers
ex) request.headers['content-type']
- Query Parameters
ex) request.query_params['search']
- Path Parameters
ex) request.path_params['username']
- Client Address
ex) request.client.host
- Cookies
ex) request.cookies.get('mycookie')
- Body
ex) bytes: await request.body()
ex) form data or multipart: await request.form()
ex) json: await request.json()
- RequestFiles
- Application
- Other State
출처
https://www.starlette.io/requests
https://fastapi.tiangolo.com/advanced/using-request-directly
'파이썬 > FastAPI' 카테고리의 다른 글
[FastAPI] Response Model - 응답을 효과적으로 처리하는 방법 (0) | 2022.05.10 |
---|---|
[Python] FastAPI의 APIRouter (0) | 2022.05.01 |
[Python] FastAPI 사용법 (2) | 2022.04.17 |
[Python] FastAPI란? FastAPI 시작하기 (0) | 2022.04.16 |
댓글