파이썬도 다른 언어들 처럼 열거체를 지원합니다.
그리고 다중 상속도 지원합니다.
main.py에 다음과 같이 코드를 작성합니다.
from enum import Enum
from fastapi import FastAPI
import uvicorn
app = FastAPI()
class UserLevel(str, Enum):
a = "a"
b = "b"
c = "c"
@app.get("/users")
def get_users(grade: UserLevel):
return {"grade": grade}
if __name__ == '__main__':
uvicorn.run("main:app", reload=True)
위와 같이 작성하면, 반드시 grade 매개변수는 a, b, c 중 하나여야 합니다.
만약에 다음과 같이 정의되지 않은 값으로 호출을 하게된다면 .. ? 어찌 될까요 .. ?
$ http ':8000/users?grade=d'
응답 결과 :
$ http ':8000/users?grade=d'
HTTP/1.1 422 Unprocessable Entity
content-length: 173
content-type: application/json
date: Wed, 14 Apr 2021 15:42:42 GMT
server: uvicorn
{
"detail": [
{
"ctx": {
"enum_values": [
"a",
"b",
"c"
]
},
"loc": [
"query",
"grade"
],
"msg": "value is not a valid enumeration member; permitted: 'a', 'b', 'c'",
"type": "type_error.enum"
}
]
}
위와 같은 메시지를 받습니다. 친절하게도 허용된 값이 무엇인지 알려줍니다.
그리고 열거형의 기본값을 적을 경우 하드 코딩 하는 것보다 다음과 같이 직접 작성해주는 것이 좋습니다.
from enum import Enum
from fastapi import FastAPI
import uvicorn
app = FastAPI()
class UserLevel(str, Enum):
a = "a"
b = "b"
c = "c"
@app.get("/users")
def get_users(grade: UserLevel = UserLevel.a): # 추가: UserLevel 기본값
return {"grade": grade}
if __name__ == '__main__':
uvicorn.run("main:app", reload=True)
위의 코드에서는 d가 없었습니다 !! d를 추가해서 다음과 같이 main.py 코드를 작성해 봅시다. a의 값도 super로 바꾸어 봅시다.
from enum import Enum
from fastapi import FastAPI
import uvicorn
app = FastAPI()
class UserLevel(str, Enum):
a = "super"
b = "b"
c = "c"
d = 'd'
@app.get("/users")
def get_users(grade: UserLevel = UserLevel.a):
return {"grade":grade}
if __name__ == '__main__':
uvicorn.run("main:app", reload=True)
$ http ':8000/users?grade=d'
위에서와 같이 HTTPie에 같은 호출을 요청합니다.
d가 이번에는 제대로 출력됨을 알 수 있습니다. 또한 나머지 알파벳에 대해서도 요청을 보내면, a를 제외한 값이 제대로 출력됨을 알 수 있습니다.
우리가 사용한 UserLevel은 열거형이기 때문에 UserLevel.a 나 UserLevel.b와 같은 형태로 값을 갑져올 수 있습니다. 여기서 a라는 변수에 우리는 super라는 값을 넣었기 때문에 a아닌 다음과 같이 요청을 해야 서버로부터 제대로된 응답을 얻을 수 있습니다.
http ':8000/users?grade=super'
'FastAPI' 카테고리의 다른 글
응답모델 - 1 (0) | 2024.01.20 |
---|---|
FastAPI 요청 본문(Request body) (0) | 2024.01.18 |
FastAPI 쿼리 매개변수 (0) | 2024.01.16 |
순서 문제 (1) | 2024.01.15 |
경로 매개변수 (0) | 2024.01.15 |