25.10.31 17일차 [fastapi_ 개요, 설치, 기본 코드 작성, 라우팅, 모듈 가져오기, 객체 생성, 라우팅 테스트, 타입힌트, ]
Datadesigner2025. 10. 31. 12:54
오늘은 fastapi를 시작했다.
개요
설치
기본 코드 작성
라우팅
모듈 가져오기
객체 생성
라우팅 테스트
타입힌트
개요 웹 서비스상 백엔드 포지션 성능 파이썬의 다른 웹 서비스보다 속도가 더 빠름 I/O 가 가장 빠름(비동기 처리 기준) 자동 문서화 SWAGGER 기본 탑재 문서화, API 테스트 등 자동 제공 입력값 유효성 검사 Pydantic을 이용하여 쉽게 처리 비동기 프로그래밍 fastapi(비동기식 최적화) <-> flask(동기식 최적화)
설치 1. 파이썬 설치 2. vscode,CLI(cmd), docker client 등 자유롭게 설치 vs code에서 fastAPI 설치 명령어 pip install -r requirements.txt = 이 텍스트파일 내부에 이름과 버전명이 적혀있어야 함 이렇게
기본 코드 작성 run.py 파일 생성 구동 명령어 uvicorn 모듈명:FastAPI 객체명 --reload --host=0.0.0.0 --port=8000 명령어 실행 이후 웹사이트 접속 http://127.0.0.1:8000/ 접속하면 사이트 돌아감
모듈 가져오기
맨 위 명령어가 모듈 가져오기다 그이후 객체를 생성한다 = app = FastAPI() 라우팅 구성은 @app.get("/") 홈페이지에 get방식으로 요청한다는 뜻이다 def home() : = 응답, json형태로
위의 글을 사이트 http//:127.0.0.1:8000으로 접속하면 이렇게 나온다
실행한 fastapi를 나가려면 ctrl + c를 누르면 꺼진다
라우팅 테스트 개요
fastapi의 경우 items에 id를 입력하고 웹사이트에 입력하는 경로에 매개변수로 데이터를 전달한다. http//: ... 에 키인 items를 입력하고 값인 1a가!를 입력하면
웹사이트에서는 json의 형태로 반환하게 된다. get 뒤에 있는게 딕셔너리의 형태로 반환되기 때문이다.
매개변수가 2개 이상일 시
url상 user에 해당하는 곳이 키가 되고 이 키는 uid이다 url상 items에 해당하는곳이 키가 되고 이 키는 item_id이다. url상 user 뒤에 있는것이 값이 되고 uid키의 값은 guest이다 마찬가지로 item_id의 값은 p303이다. 이렇게 출력된다 이때 타입이 문자열로 나오는데 이것은 추후 설명된다,
타입힌트
지금까지 언어들에서 나온 각종 타입형의 내용이다, 파이썬 에너테이션처럼 각 문자열, 스타일 등등을 지정해주고 수치형, 문자열 등등 다양한 값을 도출할 수 있게 도와주는 내용이다.
1. 경로상에 매개변수 + 타입힌트 ( 기본타입)
코드를 입력할 때 id에 int 에너테이션을 입력해주는것이다.
이렇게 하면 수치형으로 값을 받을 수 있다.
사이트 주소값에 100을 기입했을 시.
hi를 입력하면 오류가 난다.
2. 경로상에 매개변수 + 타입힌트 ( 기본타입) + 기본값 부여
기본값을 부여할 시 아무 값도 입력하지 않으면 기본값이 나온다.
매개변수에 다른 값을 부여하면 다른 값으로 나온다, hi를 입력하면 같은 오류가 뜬다.
q라는 매개변수에 값을 세팅하는것이다. 기본값을 [ ] = query([]) 로 표현한다. 이것이 매개변수라는 뜻이다 이렇게 입력하고 값에 q=여러개의 값을 넣어도 정상적으로 출력된다.
이것은 결과값을 dict 형식으로 받겠다는 내용이다. 그런데 dict형식으로 데이터를 받으려면 get방식으로는 받을 수 없다. post방식이 적절하다. 그런데 post방식은 코딩으로는 보낼 수 없다. 이렇게 post 방식으로 보내려면 swagger나 thunderclient를 사용해서 확인해야 한다. http://127.0.0.1:8000/docs
fastapi내에 기본으로 내장되어있는 swagger다. 주소창에 위 링크를 입력하면 나온다.
post로 되어있는 곳에 = dict_items 값을 입력해주면
결과값이 나온다! 자세한 방식이나 오고가는 시스템등은 더 공부해야 할것같다.
method 1. get
get의 첫번째 사용법, 데이터가 들어갈 특정한 한 곳을 정해서 1개의 정보만 가져온다.
get의 두번째 사용법, 주소창에 특정한 데이터를 넣지 않으면 모든 정보를 가져온다
2. post
post 방식이 옳게 작동하는지 확인하려면 사이트로는 안되고 이전에 사용한 http://127.0.0.1/docs 사이트를 사용한다. 위의 내용이 코드이고 사이트에 들어가면 입력한 주석 또한 출력되는것을 볼 수 있다.
여기에 한개의 딕셔너리인 title : hi를 입력한 결과다.
결과값은 status:ok,msg:1개의글이 등록되었습니다.dict:{title:hi}로 결과가 제대로 나온것을 볼 수 있다. dict로 결과를 보내려면 post방식을 사용해야 하는것이다.
3. put put 방식은 특정 id를 고유값으로 가진 데이터를 수정 (업데이트, 대체) 시키는 기능이다.
이렇게 뭔가 된다..
보통 사이트에 가입한 회원정보등을 삭제할때 사용한다고 한다. 이 부분은 응용하며 더 공부가 필요할 것 같다.
html 연계
먼저 html과 연계해서 사용하려면 jinja2를 설치해야 한다. 설치 과정은fastapi를 requirement.txt를 사용했을때랑 똑같다.
대시보드 확인차 나간 과정이고 먼저 템플릿을 가져온다.
여기부터 어떤 방식으로 작동하는지 조금 더 이해가 되었다. 데이털ㄹ html에 전달하고, 코딩에서 입력한 내용이 웹사이트에도 출력되게 데이터를 전송했다. mydata 키에 금요일k1이라는 값을 줬다.
그리고 index_data.html 파일에 키에 맞는 값이 들어가도록 세팅했다. 이때 사용한게 jinja2의 기능이다.
사이트에 들어가면 mydata에 맞는 금요일k1이 나온걸 볼 수 있따.
마지막으로 html 내부에 다른 html을 포함시킨 내용이다, include시켰다고 표현한다. 한 사이트의 화면 내에는 아주 많은 html이 있는데, 이를 모두 한 코드와 한 파일에 관리하지 않고 여러개로 쪼개어 하나의 화면을 구성한다, 실제도로 이렇게 한다고 한다, 이번 내용은 master.html이라는 파일을 불러오는 것이다,
그리고 master.html에는 sub.html이라는 파일을 불러온다.
이게 sub.html의 내용이다. 서브5라는 글자가 출력되고 이미지를 불러오는 내용의 코드를 기입했다. 이 사이트의 결과물은?
master.html에 있는 이커머스 대시보드 메인 페이지가 출력되고 sub.html에 있는 서브5와 이미지가 출력되는것을 볼 수 있다!