반응형
SMALL
from fastapi import APIRouter
# 사용자 정의모듈 임포트 에러로 경로명 수동 지정
import sys
sys.path.append('/Users/kimkunhwi/Documents/Projects/python_work/crime_dash_board/crime_dash_board_server/branch_crime_app')
# 사용자 정의 모듈
import branch_crime_util
router = APIRouter(
prefix="/crime_branch",
tags=["crime_branch"]
)
@router.get("/")
def default_crime_branch():
# 함수를 호출해 데이터를 받고 리턴
default_crime_data = branch_crime_util.get_default_crime_branch_data()
return default_crime_data
■ 본 글에 쓰인 데이터가 필요한 인원은 댓글로 요청 요망
1. Main.py 에 설정 로직 작성해주기
# main.py
import uvicorn
from fastapi import FastAPI
app = FastAPI()
@app.get('/')
def home():
return {'app' : 'main'}
if __name__ == "__main__":
uvicorn.run("main:app", host='0.0.0.0', port=8892, reload=True)
2. 라우터로 사용할 py 생성 후 라우터 설정 및 Main.py 에 등록해주기
반응형
■ 파일 생성 및 라우터 설정
■ fastapi 에서 APIRouter 를 임포트 해준다.
■ 내부 인자로 prefix 는 url path를 넘겨준다
■ tags 에 이름을 넘겨줌으로서 docs에서 api 를 분리할 수 있다.
# branch_crime_router.py
from fastapi import APIRouter
router = APIRouter(
prefix="/crime_branch",
tags=["crime_branch"]
)
@router.get("/")
def default_crime_branch():
return {"hello" : "world"}
■ Main.py 에 라우터 등록
■ 본인이 작성한 파일에서 본인이 작성한 라우터를 임포트 한다.
■ FastAPI 에 include_router 메서드를 통하여 등록해준다.
import uvicorn
from fastapi import FastAPI
# 사용자 정의 라우터 임포트
from branch_crime_app import branch_crime_router
app = FastAPI()
#라우터 등록
app.include_router(branch_crime_router.router)
@app.get('/')
def home():
return {'app' : 'main'}
if __name__ == "__main__":
uvicorn.run("main:app", host='0.0.0.0', port=8892, reload=True)
3. Util.py 생성 후 csv 를 읽어오는 함수 작성 및 사용
SMALL
■ 함수 작성
■ 필자의 데이터는 average, main, sub 3가지의 파일로 구성되어 있으며 category 리스트에 정의해둔다.
■ DataFrame 을 담을 dict_data 라는 dictionary 형 변수를 미리 선언해둔다
■ 카테고리의 수만큼 반복을 돌며 파일 경로를 스트링 포맷을 동적으로 생성 및 csv 를 읽어준다.
■ df.transpose 를 통해 데이터를 전처리하여 행과 열 의 데이터를 서로 바꿔준다.
■ df.rename 을 통해 바뀐 데이터의 0번쨰 인덱스의 값을 컬럼으로 만들어준다.
■ df.drop을 통해 컬럼으로 적용된 열을 삭제 시켜준다.
#파일 : branch_crime_util
import pandas as pd;
def get_default_crime_branch_data():
#필자의 데이터는 average, main, sub 3가지의 파일로 구성되어 있으며 category 리스트에 정의해둔다.
category = ['average','main', 'sub']
#DataFrame 을 담을 dict_data 라는 dictionary 형 변수를 미리 선언해둔다
dict_data = {}
try:
for i in (0,2):
#카테고리의 수만큼 반복을 돌며 파일 경로를 스트링 포맷을 동적으로 생성 및 csv 를 읽어준다.
csv_data = pd.read_csv(f'./templates/crime_data/branch/2024/category/{category[i]}/crime_report_branch_1_2024_{category[i]}_category.csv')
df = pd.DataFrame(csv_data)
#df.transpose 를 통해 데이터의 행과 열 의 데이터를 서로 바꿔주는 전처리를 진행한다.
df = df.transpose()
#df.rename 을 통해 바뀐 데이터의 0번쨰 인덱스의 값을 컬럼으로 만들어준다.
df.rename(columns=df.iloc[0], inplace=True)
#df.drop을 통해 컬럼으로 적용된 열을 삭제 시켜준다.
df = df.drop(df.index[0])
dict_data[category[i]] = df
return dict_data
except Exception:
print(Exception)
■ 함수 사용
■ 필자 정의 모듈에서 에러가 나서 sys로 직접 경로 설정을 해주었다.
■ 이전에 만든 util 을 임포트 하고 함수를 호출해 데이터를 리턴 해준다.
from fastapi import APIRouter
# 사용자 정의모듈 임포트 에러로 경로명 수동 지정
import sys
sys.path.append('/Users/kimkunhwi/Documents/Projects/python_work/crime_dash_board/crime_dash_board_server/branch_crime_app')
# 사용자 정의 모듈
import branch_crime_util
router = APIRouter(
prefix="/crime_branch",
tags=["crime_branch"]
)
@router.get("/")
def default_crime_branch():
default_crime_data = branch_crime_util.get_default_crime_branch_data()
return default_crime_data
4. 테스트
■ 터미널에서 아래 명령어로 fastapi 실행
uvicorn main:app --port 본인이 실행할 포트 --reload
■ 본인 포트의 docs 들어가보기
- docs url : 127.0.0.1:본인포트/docs
■ crime_branch 에 대한 docs 가 있다.
■ api 를 try it out 을 해서 데이터가 잘 뜨면 성공
■ 폴더 구조
LIST
'Programming > python' 카테고리의 다른 글
[ Python ] Django auth 모듈을 사용해서 로그인, 로그아웃, 회원가입 구현 (2) | 2024.07.04 |
---|---|
[ Python ] FastApi 로그 처리 (2) | 2024.06.13 |
[ Python ] pandas, pdfplumber 를 사용한 범죄통계 PDF 데이터 전처리 (0) | 2024.05.22 |
[ Python ] Mac에서 Pycharm, Conda 사용해서 FastApi 설치 및 테스트 (0) | 2024.05.20 |
[ Python ] Pandas를 통해 데이터 정렬 및 메서드 사용해보기 (0) | 2024.05.19 |