fastAPI 따라하기

이유진·2021년 12월 29일
0

fastAPI

목록 보기
1/1
from fastapi import FastAPI
from pydantic import BaseModel

import requests

app = FastAPI()

db = []

class City(BaseModel):  #--> BaseModel을 기반으로 class model을 만들예정
    name : str
    timezone : str
    
@app.get("/") #--> 예시1
def root():
    return {"Hello" : "World!"}

#--------------------------------------------------------------------------------------------------

@app.get('/cities') 
def get_cities(): ##--> 여러개의 도시 정보를 불러와주는것
    results =[]
    for city in db:  ##--> db에서 한개씩 나온 것을 city라고 정의했을뿐
        strs = f"http://worldtimeapi.org/api/timezone/{city['timezone']}"
        r = requests.get(strs) ##--> get으로 상대의 API를 가져온다는것...음...
        cur_time = r.json()['datetime'] ##--> r을 json화 한 것중 timezone만 가져옴
        results.append({'name' : city['name'], 'timezone' : city['timezone'], 'current_time' : cur_time}) ##--> append할땐 파이썬의 형식 아무거나 OK

    return results

@app.get('/cities/{city_id}')
def get_city(city_id : int): ##--> 한개의 도시 정보를 불러오는것 
    city = db[city_id-1] ##--> index는 1번째가 0부터 시작하므로
    strs = f"http://worldtimeapi.org/api/timezone/{city['timezone']}"
    r = requests.get(strs) 
    cur_time = r.json()['datetime'] 

    return {'name' : city['name'], 'timezone' : city['timezone'], 'current_time' : cur_time}

@app.post('/cities') ##--> 도시 정보를 생성하는 것
def create_city(city : City):
    db.append(city.dict()) ##--> 위의 class에서 만든 City 모델의 정보를 dictionary화 해줘야함..왜? --> city를 dict화 해서 넣어야 정보가 db에 저장됨..?
    
    return db[-1] ##--> db에 append를 통해서 city정보를 넣으면, return값은 가장 마지막것을 반환해주기 위해 [-1]하는것

@app.delete("/cities/{city_id}") ##--> city_id 정보를 삭제하는것
def delete_city(city_id : int):
    db.pop(city_id-1)
    
    return {}

docs 링크에서 보여지는 화면👇

1) post

: class City(BaseModele)의 "name"과 "timezone" 정보로 create한다.

2) cities get


: @app.get('/cities')
def get_cities(): 에서 create한 모든 cities 정보를 불러온다.(총 2개 : 서울과 부산)

3) city get



:@app.get('/cities/{city_id}')
def get_city(city_id : int): 에서 'city_id=1'과 'city_id=2'를 통해 각각의 city의 정보를 불러온다.

4) delete

:@app.delete("/cities/{city_id}")
def delete_city(city_id : int): 에서 'city_id=1'을 삭제한다.

5) 다시 cities get


: 'city_id=1'을 삭제한 후에 cities의 정보를 확인한다.
'city_id=2'의 city정보만 확인 가능하다.

  • 위의 영상에서 변경된 timezone 주소
    : 변경된 timezone주소
    --> "json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)" 에러가 뜨는 경우 해결방법
profile
차근차근 배워나가는 주니어 개발자

1개의 댓글

comment-user-thumbnail
2022년 7월 18일

FastAPI 검색하다가 우연히 들어왔습니다. 멋져요 유진님 !!

답글 달기