본문 바로가기
파이썬/FastAPI

[FastAPI] Request Object: HTTP Request에 직접 접근해 사용하는 방법

by 책 읽는 개발자_테드 2022. 5. 2.
반응형

· 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

반응형

댓글