본문 바로가기

Python45

FastAPI 05. 반환 모델과 유사한 모델들 생성하기 반환 모델 작성하기 FastAPI는 기본적으로 사용하는 모델을 추정하여 입출력값을 나타내지만 자동적으로 표현해 주는 기능에만 의존할 수는 없다. 예를 들어 게시판의 글의 목록과 각각의 글을 불러오는 API가 있을 때, 다음과 같이 설계할 수 있다. 게시판 글 목록 : 글 번호, 글 제목, 조회 수, 댓글 수, 작성일 게시판 글 : 글 제목, 글 내용, 조회수, 댓글 수, 댓글 목록, 작성일 이러한 경우 각 API에 맞도록 반환모델을 기록하는것이 개발에 도움이 될 수 있다. FastAPI에서 반환 모델을 명시하는 방법은 크게 2가지이다. 첫 번째는 Python함수 반환값을 나타내듯이 ->를 사용하여 반환 타입을 입력하는 방법이고, 다른 방식은 response_model값을 지정하는 방식이다. @app.po.. 2023. 1. 18.
[Python] 백준 1053 팰린드롬 공장 문제 링크 : https://www.acmicpc.net/problem/1053 1053번: 팰린드롬 공장 팰린드롬이란, 앞에서부터 읽었을 때와, 뒤에서부터 읽었을 때가 같은 문자열이다. 모든 문자열이 팰린드롬이 아니기 때문에 다음과 같은 4가지 연산으로 보통 문자열을 팰린드롬으로 만든다. www.acmicpc.net 1. 접근 방법 어떤 문자열을 팰린드롬으로 만드는데, 사용할 수 있는 연산이 총 4가지가 있어 처음에는 일반적인 백트래킹으로 접근했다. 하지만 과정마다 팰린드롬임을 확인하는 것이 많은 시간이 필요하고, 각 연산을 문자열의 몇 번째 위치에서 적용할지도 고민해야 할 문제였다. 그래서 백트래킹이 아닌 재귀를 활용한 DP로 접근해 보았다. 2. 풀이 코드 🖥python 코드 링크 : https:/.. 2023. 1. 16.
FastAPI 04. 바디의 예시 만들기 OpenAPI를 지원하는 FastAPI를 더 잘 활용하는 방법은 스키마 활용이라고 생각한다. API를 작성하고, 간단하게 설명해 줄 수 있지만, API를 제대로 작성하고 또 제개도 활용학 위해서는 OpenAPI를 따라 스키마를 작성하는 것이 필요하다고 생각한다. 그렇게 한다면 입출력 예시뿐만 아니라 가능한 상태 코드 등을 쉽게 이해할 수 있다. 이는 API 개발뿐만 아니라 테스트나 유지 보수에도 도움 되는 작업이라고 생각한다. FastAPI에서는 이를 달성하기 위해 Pydantic을 사용하는 방법과 FatsAPI에서 제공하는 Body()함수를 사용하는 방법을 제공한다. Pydantic을 사용하는 방법 class Item(BaseModel): id: int name: str description: str .. 2023. 1. 16.
FastAPI 03. 리퀘스트 바디 API 서버에서 사용자 입력을 받기 위하여 경로 매개변수, 퀘리 매개변수도 사용하지만 일반적으로 리퀘스트 바디를 많이 사용할 것이다. 특히 많은 입력이 필요한 경우 매개변수를 활용하여 URL을 조작하는 것보다 JOSN을 활용하여 바디로 통신하는 것이 수월하다. 이전에 리퀘스트 바디는 Pydantic을 사용한다고 하였다. 이번에는 바디를 더욱 다양하게 활용하는 방법을 알아볼것이다. 여러 개의 매개변수, 바디 사용하기 @app.post("/items/{item_id}") async def get_item( *, item_id: int = Path(title="The ID of item to get", ge=0, le=10000), q: str | None = Query(default=None, max_len.. 2023. 1. 10.
FastAPI 02. 경로, 쿼리 매개변수 검증 API를 만들게 되면 경로 매개변수나 쿼리 매개변수 검증이 필요한 경우가 있다. 예를 들어 경로 매개변수가 0 이상 정수값이어야 한다거나, 쿼리 매개변수의 문자열의 길이를 제한하는 등 검증을 한다. FastAPI에서는 Query, Path라는 편리한 방법을 제공한다. 쿼리 파라미터 @app.get("/items/") async def read_item(q: str): return q 우선 다음과 같은 API에서 시작하자, 하나의 쿼리 파라미터 q를 입력받는 경우를 가정했을 때 상황을 구체화 해보자. from fastAPI import FastAPI, Query @app.get("/items/") async def read_item(q: str = Query(defalut=None)): return q 함.. 2023. 1. 6.
FastAPI 01. 첫걸음 FastAPI FastAPI는 다른 Python 웹 프레임워크에 비하여 비교적 최근에 공개되었지만, 많은 관심을 받고 있다. FastAPI의 주요 특징으로는 빠른 속도, 빠른 코드 작성과 적은 버그, 쉽고 간결하며 견고함 등이 있다. 웹과 관련된 부분은 Starlette을, 데이터와 관련된 부분은 Pydantic을 사용한다. 또한 대화형 API 문서로 Swagger UI, ReDoc을 제공한다. FastAPI 첫걸음 from fastapi import FastAPI app = FastAPI() @app.get("/") async def root(): return {"message": "Hello, FastAPI"} 기본적인 FastAPI앱 구조는 다음과 같다. FastAPI 클래스를 불러와서 나의 앱 객.. 2023. 1. 4.
[Python] 백준 11689 GCD(n, k) = 1 문제 링크 : https://www.acmicpc.net/problem/ 1. 문제 설명 어떤 수가 주어지면, 그 수의 약수를 구하거나 찾거나 활용해야 한다. 대부분의 경우, 그리고 코딩 테스트에 등장하는 문제는 에라토스테네스의 체를 활용하는 정도인데, 백준에서는 그 이상의 지식이 필요한 문제가 종종 있다. 이 문제도 결론을 먼저 말하자면, 오일러 피 함수를 사용해야 한다. 2. 문제 풀이 풀이 코드 : Python 우선 오일러 피 함수를 알아보자. 오일러 피 함수는, 어떤 정수가 주어졌을 때, 그 정수보다 더 작은 수 중에서 서로소인 수의 개수를 알아낼 수 있는 함수이다. 함수는 다음과 같이 계산할 수 있고, 이 값을 계산하기 위해서는 n의 약수가되는 소수를 발견해야 한다. for i in range(.. 2022. 12. 2.
[Python] 백준 1948 임계경로 문제 링크 : https://www.acmicpc.net/problem/1948 1948번: 임계경로 첫째 줄에 도시의 개수 n(1 ≤ n ≤ 10,000)이 주어지고 둘째 줄에는 도로의 개수 m(1 ≤ m ≤ 100,000)이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 도로의 정보가 주어진다. 처음에는 도로의 www.acmicpc.net 1. 접근 방법 기본적으로 최단 경로를 찾아야 하는 문제인데, 추가적인 조건이 있어서 접근이 조금 까다로웠다. 시작점부터 도착지까지 최대 시간을 구하는 것은 어렵지 않게 해결할 수 있다. 모든 모로를 확인하며 더 늦은 시간으로 갱신하면 된다. 하지만, '이런 사람들이 지나는 도로의 수를 카운트하여라' 부분에서 시간이 걸렸다. 문제에서 말한 문장은 수정이 필.. 2022. 8. 22.
[Python] 백준 13258 복권 + 은행 문제 링크 : https://www.acmicpc.net/problem/13258 13258번: 복권 + 은행 두 번째 예제의 경우에 첫 주가 지난 후 1/3의 확률로 (3, 2, 2)가, 1/3의 확률로 (2, 3, 2)가, 1/3의 확률로 (2, 2, 3)이 된다. 둘째 주에 (3, 2, 2)는 기댓값이 3.4286이 되고, (2, 3, 2)와 (2, 2, 3)은 기댓값이 2.2857 www.acmicpc.net 1. 접근 방법 간단한 확률 계산 문제로, 기댓값을 알아내면 된다 2. 풀이 코드 🖥python 코드 링크 : https://github.com/mintropy/PS/tree/master/BAEKJOON/Python/13000/13200/13258.py GitHub - mintropy/PS:.. 2022. 8. 5.