pydantic, starlette
python data library
this part is from
https://docs.pydantic.dev/
타입힌트를 통해서 데이터 형식을 검사해주는 라이브러리, parsing까지 지원
Pydantic
datatype validation
from datetime import datetime
from pydantic import BaseModel
class User(BaseModel):
id: int
name = 'John Doe'
# signup_ts: Optional[datetime] = None
signup_ts: datetime | None = None # python 3.10 and above
friends: list[int] = []
external_data = {
'id': '123',
'signup_ts': '2019-06-01 12:22',
'friends': [1, 2, '3'],
}
user = User(**external_data)
print(user.id)
#> 123
print(repr(user.signup_ts))
#> datetime.datetime(2019, 6, 1, 12, 22)
print(user.friends)
#> [1, 2, 3]
print(user.dict())
"""
{
'id': 123,
'signup_ts': datetime.datetime(2019, 6, 1, 12, 22),
'friends': [1, 2, 3],
'name': 'John Doe',
}
"""
parsing
된다. + required variablefrom pydantic import ValidationError
try:
User(signup_ts='broken', friends=[1, 2, 'not number'])
except ValidationError as e:
print(e.json())
web framework
Starlette is a lightweight ASGI framework/toolkit, which is ideal for building async web services in Python.
swagger
정확히는 OpenAPI Specification으로,
REST API를 json이나 yaml로 규칙에 맞게 기술하는 방식
밑의 포스팅을 참고할 것
https://gruuuuu.github.io/programming/openapi/
dependency management tool
AI 프로젝트를 진행하던 중, gcp 서버 내에서 아나콘다로 인한 충돌을 경험해 더 이상 쓰지 않을 거라 생각했다. 백엔드 프로젝트를 진행할 때는 다를 수도 있다는 기대감에 다시 사용해보려한다.
필요없는 라이브러리를 포함하지 않는 miniconda로 진행
homebrew로 설치하면 경로 관련해서 문제가 생길 수도 있지만 일단은 brew로 다운
주의해야할 것이 poetry add로 라이브러리를 설치하고 install로 환경을 복원한다.
https://www.youtube.com/watch?v=aZTmnCkCa3M
https://blog.gyus.me/2020/introduce-poetry/
https://python-poetry.org/docs/basic-usage/#installing-dependencies
아마도 지금의 나는 정리해봤자 와닿지 않을 것이다.
그래도 keywork로 정리하면,
생활코딩 https://youtu.be/PmY3dWcCxXI
블로그 포스팅 https://bentist.tistory.com/37
https://www.moesif.com/blog/technical/api-design/Which-HTTP-Status-Code-To-Use-For-Every-CRUD-App/
상황에 맞게 status code를 사용할 것
https://gmlwjd9405.github.io/2019/02/01/orm.html
database connection
python에서 사용하는 orm library
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
SQLALCHEMY_DATABASE_URL = "sqlite:///./sql_app.db"
# SQLALCHEMY_DATABASE_URL = "postgresql://user:password@postgresserver/db"
engine = create_engine(
SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False}
)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
Create Model, using tableplus
fastapi 문서에서, 모델을 만든 다는 것은 schema를 class로 작성하는 것을 의미
from sqlalchemy import Column, String, Integer
from .database import Base
class Blog(Base):
__tablename__ = 'blogs'
id = Column(Integer, primary_key=True, index=True)
title = Column(String)
body = Column(String)