일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- DART
- join
- If
- WECODE
- 위코드
- count
- js
- decorator
- STR
- SQL
- MAX
- Python
- slice
- lambda
- split
- and
- FOR
- index
- Algorithm
- iNT
- Sorted
- 파이썬
- enumerate
- map
- sum
- or
- len
- range
- LOWER
- list
- Today
- Total
목록나는 이렇게 학습한다/Framework (7)
코드로 우주평화
jsonable_encoder 이란? FastAPI 에서 제공하는 인코더 함수로, 보통은 클라이언트로 전송하기 전에 응답하는 객체를 json 으로 인코딩할 수 있도록 변환해 주는 역할을 합니다. (참고로 json 으로 변환해 주는 것은 아닙니다!) 실제로 FastAPI 는 jsonable_encoder 를 어떻게 사용할까요? 아래 코드는 요청이 유효하지 않을 때 에러를 응답하는 함수입니다. # fastapi.exception_handlers.py async def request_validation_exception_handler( request: Request, exc: RequestValidationError ) -> JSONResponse: return JSONResponse( status_code=..
Django 에서 middleware 추가하기 장고에서 미들웨어를 추가하는 방법에는 함수형과 클래스형이 있는데 이 글에서는 클래스형에 대해서 설명하겠다. 먼저 미들웨어 클래스를 정의하고 __init__ 메서드와 __call__ 메서드를 다음과 같이 추가하자. from django.http import HttpRequest, HttpResponse class CustomMiddleware: def __init__(self, get_response): self.get_response = get_response def __call__(self, request: HttpRequest) -> HttpResponse: some_function() # 요청에 영향을 줄 수 있는 로직 response = self.g..
BaseSettings을 사용한 객체를 lru_cache 할 때, TypeError: unhashable type: 에러가 발생할 때가 있다. 정리하면 다음과 같은 상황이다. given FastAPI 에서 lru_cache로 반환하는 BaseSettings 객체를, when 다시 lru_cache를 사용하는 함수가 인수로 받을 때, then TypeError: unhashable type: 에러가 발생함. e.g class Config(BaseSettings): URL: str = Field(..., env="URL") class Config: env_file = "secrets/.env" env_file_encoding = "utf-8" @lru_cache def get_config() -> Confi..
코드를 작성하다 보면 특정 상황에 대한 예외처리를 만들고 싶을 때가 있다. FastAPI는 일반적으로 HTTPException을 이용해 예외를 처리하는데, 유사한 예외를 반복적으로 처리해야 한다면 우리가 직접 Exception을 커스텀해서 사용할 수 있다. 이번 글에서는 FastAPI에서 Custom Exception을 어떻게 구현하는지 코드로 설명해보겠다. 구현 시작 먼저 아주 간단한 api를 작성해보았다. from fastapi import FastAPI app = FastAPI() @app.get("/{name}") def home(name:str): return {"detail": f"Hello, {name}"} name을 쿼리 스트링으로 넘겨주면 "Hello, {name}"으로 반환해주는 api..
Serializer의 용도는 무엇인가? serializer를 사용하면 쿼리셋과 인스턴스같은 데이터를 json등과 같은 유형으로 쉽게 렌더링 할 수 있다. 뿐만 아니라 데이터의 유효성을 검사해준다. DRF에는 serializer의 종류가 다양하다. (Model, List, Base 등) 레퍼런스 APIView과 @apiview의 차이는 무엇인가? ‘클래스기반 뷰’와 ‘함수 기반 뷰’라고 볼 수 있다. 전자는 기존 장고와 유사하고 후자는 Flask나 FastAPI와 생김새가 유사하다. 레퍼런스 generics와 ViewSet의 차이는 무엇인가? generics 의 경우 ListAPIView, ListCreateAPIView 처럼 형태, 또는 명령에 대한 기능을 도와준다. 하나의 형태나 명령을 넘어서 모두 사..
django(장고)에서 만들려는 데이터베이스 테이블의 관계가 n:n 관계, 즉 ManyToMany 관계의 테이블을 생성하는 방법은 크게 3가지가 있다. 1번 >>> 중간 테이블을 만들어 중간테이블이 각각 다른 테이블을 FK로 가져오는 방법 2번 >>> models.py 작성시에 다대다 관계의 테이블 중 하나의 테이블에 ManyToManyField를 사용하는 방법(이 방법은 장고가 자동으로 중간테이블을 생성해준다) 3번 >>> 1번, 2번 모두 사용하는 방법으로 중간 테이블을 만들고, ManyToManyField도 사용하면서 중간 테이블 지정을 미리 만들어둔 중간테이블로 지정하는 방법 *세 가지 방법에 대한 차이점(아래 예제를 보고 오면 이해가 될거에요!) 더보기 차이점1. >>> 1번의 경우 A에서 한 ..
장고를 튜토리얼부터 배우고 있는데 아직 모르는 것 투성이다. 따라는 하는데 이해가 안된다. 그렇다면 이해를 하기 위해 무엇부터 공부해야할까? 문득 '모든 언어는 단어에서부터 시작한다'라는 생각이 들었다. 단어의 뜻을 알아야 문장의 의미를 유추할 수 있다. 의미를 유추하면 그제서야 맥락이 보이기 시작한다. 그렇다면 지금 내가 해야할 것은 장고와 관련된, 특히 자주 쓰이는 용어들의 의미를 파악하는 것이다. 이 글은 생소한 용어들을 하나씩 정리하면서 앞으로 내가 장고를 이해하는데 도움이 되어줄 글이다. 앞으로 주기적으로 업데이트 하면서 새로운 용어는 추가하고 잘못알고 있었던 것을 수정할 예정이다. URLconf (파일명 : urls.py) - 클라이언트로부터 요청을 받으면 가장 먼저 요청에 들어있는 URL을 ..