django 7

Django 에서 middleware 추가하기

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..

Class-based Views

Class-based Views 클래스 기반 뷰 Django's class-based views are a welcome departure from the old-style views. 장고의 클래스 기반 뷰가 기존 뷰 스타일로 부터 분리된 것은 반가운 일이다. REST framework provides an APIView class, which subclasses Django's View class. 레스트 프레임워크는 장고의 뷰 클래스를 하위 클래스로 분류하는 APIView 클래스를 제공한다. APIView classes are different from regular View classes in the following ways: APIView 클래스들은 일반적인 뷰 클래스들과 다음과 같은 차이점이..

DRF 궁금한 것 모음

Serializer의 용도는 무엇인가? serializer를 사용하면 쿼리셋과 인스턴스같은 데이터를 json등과 같은 유형으로 쉽게 렌더링 할 수 있다. 뿐만 아니라 데이터의 유효성을 검사해준다. DRF에는 serializer의 종류가 다양하다. (Model, List, Base 등) 레퍼런스 APIView과 @apiview의 차이는 무엇인가? ‘클래스기반 뷰’와 ‘함수 기반 뷰’라고 볼 수 있다. 전자는 기존 장고와 유사하고 후자는 Flask나 FastAPI와 생김새가 유사하다. 레퍼런스 generics와 ViewSet의 차이는 무엇인가? generics 의 경우 ListAPIView, ListCreateAPIView 처럼 형태, 또는 명령에 대한 기능을 도와준다. 하나의 형태나 명령을 넘어서 모두 사..

DRF를 사용하여 간단한 CRUD 구현해보기

목표 DRF를 사용하여 간단한 CRUD 구현해보기 viewset 이용하기 serializer 이용하기 목적 DRF 기본기능 익히기 결과 viewset과 serializer를 이용하여 읽기(get), 쓰기(post) 기능 구현 수정(update)과 삭제(delete) 기능은 구현하지 못함 # serializers.py class MessageSerializer(serializers.ModelSerializer): class Meta: model = Message fields = "__all__" # views.py class MessageViewSet(viewsets.ModelViewSet): queryset = Message.objects.all() serializer_class = MessageSeri..

Log/Today 2022.01.28

[TIL]django__데이터 중복_IntegrityError_ValidationError

오늘 배운 것 회원가입 시 이메일 정보가 중복되면 에러로 반환하고 싶다. 장고 view에서 데이터의 중복을 확인하는 방법에는 여러 가지가 있는데 한 번 살펴보자. 처음에 나는 회원정보가 있는 Member테이블에서 email 칼럼의 값을 리스트 형태로 가져와 변수에 저장했다. 그리고 요청받은 email 데이터가 해당 리스트에 있는지 확인 하는 식으로 코드를 작성했다. 코드는 다음과 같다. email_list = Member.objects.values_list("email", flat=True) if data['email'] in email_list: # data['email']은 요청받은 이메일 정보이다. return ~~ 그리고 동료로부터 배운 두 번째 방법은 exists()매서드를 활용에 중복 여부를 ..

'ManyToManyField' 또는 '중간테이블'로 데이터 가져오는 방법

django(장고)에서 만들려는 데이터베이스 테이블의 관계가 n:n 관계, 즉 ManyToMany 관계의 테이블을 생성하는 방법은 크게 3가지가 있다. 1번 >>> 중간 테이블을 만들어 중간테이블이 각각 다른 테이블을 FK로 가져오는 방법 2번 >>> models.py 작성시에 다대다 관계의 테이블 중 하나의 테이블에 ManyToManyField를 사용하는 방법(이 방법은 장고가 자동으로 중간테이블을 생성해준다) 3번 >>> 1번, 2번 모두 사용하는 방법으로 중간 테이블을 만들고, ManyToManyField도 사용하면서 중간 테이블 지정을 미리 만들어둔 중간테이블로 지정하는 방법 *세 가지 방법에 대한 차이점(아래 예제를 보고 오면 이해가 될거에요!) 더보기 차이점1. >>> 1번의 경우 A에서 한 ..

장고 용어 정리

장고를 튜토리얼부터 배우고 있는데 아직 모르는 것 투성이다. 따라는 하는데 이해가 안된다. 그렇다면 이해를 하기 위해 무엇부터 공부해야할까? 문득 '모든 언어는 단어에서부터 시작한다'라는 생각이 들었다. 단어의 뜻을 알아야 문장의 의미를 유추할 수 있다. 의미를 유추하면 그제서야 맥락이 보이기 시작한다. 그렇다면 지금 내가 해야할 것은 장고와 관련된, 특히 자주 쓰이는 용어들의 의미를 파악하는 것이다. 이 글은 생소한 용어들을 하나씩 정리하면서 앞으로 내가 장고를 이해하는데 도움이 되어줄 글이다. 앞으로 주기적으로 업데이트 하면서 새로운 용어는 추가하고 잘못알고 있었던 것을 수정할 예정이다. URLconf (파일명 : urls.py) - 클라이언트로부터 요청을 받으면 가장 먼저 요청에 들어있는 URL을 ..