Django

    [DRF] HyperlinkedModelSerializer 살펴보기

    ModelSerializer에 이어서 HyperlinkedModelSerializer를 살펴보자 HyperlinkedModelSerializer는 ModelSerializer와 비슷하다. 단지 관계를 표현할 때 기본 키가 아닌 하이퍼링크로 표현한다는 점을 제외하곤. 기본적으로 serializer에는 기본 키 필드 대신 URL 필드가 포함된다. URL 필드는 HyperlinkedIdentifyField serializer 필드를 사용하여 표현되며 모델의 모든 관계는 HyperlinkedRelatedField serializer 필드를 사용하여 표현된다. 필드 옵션에 추가하여 기본 키를 명시적으로 포함할 수 있다. 예를 들면 아래와 같다. class AccountSerializer(serializers.Hy..

    [DRF] ModelSerializer 살펴보기

    Serializer 클래스 중 Django Model과 매핑되는 ModelSerializer를 알아보자. 이 ModelSerializer 클래스는 모델 필드에 해당하는 필드를 사용하여 Serializer 클래스를 자동으로 만들 수 있는 shortcut을 제공한다. ModelSerializer 클래스는 Serializer 클래스와 대부분 같다. 아래의 경우를 제외하고, 모델에 따라 필드가 자동으로 생성된다. 자동으로 unique_together, validators와 같은 Seiralizer의 validator를 생성한다. .create() 및 .update()의 간단한 기본 구현이 포함되어 있다. ModelSerializer를 선언하면 아래와 같다. class AccountSerializer(serial..

    Django의 특징

    Django를 사용하면서 Django를 왜 쓰는가? Djanog는 어떤 특징이 있는가란 궁금증을 가진 적이 없었다. 생각해보면 왜 쓰는가에 대한 이유를 알아야지 적합한 웹 프레임워크들을 사용할 수 있는데... 그런 반성의 의미에서 Django는 어떤 웹프레임워크인지 알고자 한다. 1. Django의 특징 1.1. MTV 구조 1.1.1. View urlpattern에 알맞은 호출이 들어오면 요청은 view로 들어오게 된다. view는 웹 클라이언트로부터 HTTP요청을 수신하고 HTTP 응답을 되돌려준다. 이곳에서 DB에 접근하고(ORM을 통한 데이터 쿼리) Template을 렌더링 하기 위해 자원들을 활용한다. 1.1.2. Model Model에서는 파이썬 객체를 통해 데이터를 관리하고 쿼리한다. Dja..

    Gunicorn에 대해 알아보자.

    gunicorn은 WSGI의 일종이다. 그렇다면 WSGI는 무엇일까? 1. WSGI란? WSGI는 Web Server Gateway Interface의 약자입니다. 여러 언어 사용자들의 다양한 요청을 이해할 수 있도록 이를 공통된 규칙으로 변환하는 관문 역할을 한다. 즉 웹서버와 애플리케이션 서버 간의 게이트웨이트 역할을 하는 인터페이스이다. 필자가 이해한대로 풀어쓴다면 Web Server(ex. nginx)로 요청이 온 Http request를 WSGI가 Application Server(Django)가 이해할 수 있도록 데이터 형식을 변환하고 응답할 때도 반대로 변환하는 역할을 맡는다. 초기에는 이런 게이트웨이의 역할로 CGI를 썼지만 이는 요청이 들어올 때마다 파이썬 스크립트를 처음부터 실행하게 되..

    [Pytest] - TestRunner 설정하기

    Pycharm에서 Debuging을 하기 위해 mange.py 에서 test를 실행할 때 pytest로 돌리고 싶었다. 물론 Pycharm 설정에서 test runner를 설정하는 방법도 있지만 다양한 IDE에서 같은 설정으로 하고 싶어서 찾던 중 testrunner를 변경하는 방법을 찾았다. 자세한 문서는 여기 FAQ — pytest-django documentation © Copyright 2022, Andreas Pelme and contributors. Revision 42b7db2f. pytest-django.readthedocs.io Pycharm에서 디버깅을 해봤다. 잘된다.

    [Pytest] - django-dotenv 와 pytest-dotenv 오류

    1. 문제 상황 테스트 코드를 짜 보려고 pytest를 설치했다. 근데 해당 테스트 코드를 실행하는 도중 예기치 못한 문제를 맞닥뜨렸다. django-dotenv와 pytest-dotenv의 naming conflict가 발생했다. 해당 글에서 댓글에는 이렇게 적혀있다. Warning to Django Users: If you're using django-dotenv to call dotenv.read_dotenv() from your manage.py module, this library will break it. This library requires python-dotenv, which also uses the 'dotenv' namespace, and you'll end up a ModuleNot..

    [DRF] - Serializers Class 알아보기(1)

    DRF의 다양한 Serializers Class를 알아보겠다. 공식문서를 바탕으로 이 포스팅은 작성되었다. 1. Declaring Serializers 공식 문서의 예제를 살펴보자 from datetime import datetime class Comment: def __init__(self, email, content, created=None): self.email = email self.content = content self.created = created or datetime.now() comment = Comment(email='leila@example.com', content='foo bar') 우선 직렬화할 모델과 개체를 선언했다. 그리고 이걸 Serializer Class로 선언해보자. f..

    [DRF - Django Rest Framework] Serializer Field 톺아보기(3)

    오늘은 Composite Fields를 살펴보겠다. Composite Fields 1.1 ListField 개체 리스트의 유효성을 검사하는 필드 클래스이다. 이해한 바로는 List를 반환해주고 그 안의 개체들이 선언한 필드인지 아닌지 유효성 검사를 한다. 인수는 다음과 같다 child - 목록에서 개체의 유효성을 검사하는 데 사용되는 필드 인스턴스이다. 설정하지 않으면 개체의 유효성이 검사되지 않는다. allow_empty - 말 그대로 빈 리스트를 허용할지 말지를 설정한다. min_length - 최소 개수를 설정한다. max_length - 최대 개수를 설정한다. 코드를 살펴보자. 예제는 해당 사이트에서 가져왔다. # import serializer from rest_framework from res..

    Django Queryset - Lazy QuerySet 과 올바른 Caching 사용법

    당신은 쿼리셋에 대해 얼마나 알고 계신가요. 이번 시리즈는 Django 의 Query Api 를 살펴보면서 그동안 내가 놓친 부분은 없었나 혹은 몰랐던 것들을 알아보려고 한다.(기본적인 것도 정리하려고 했으나, 너무 기초적인 거라 빼기로 했다.) Django 공식 문서를 보고 진행하겠다. 1. Lazy QuerySet Querysets are lazy! 공식 문서에 표현되어 있다. 이말이 뭔가하니 queryset이 평가되기 전까지는 실제로 데이터베이스를 들르지 않는다. 그렇다면 QuerySet은 언제 평가(evaluated)될까? 1.1 Queryset이 평가되는 경우 1.1.1 반복 Queryset은 반복 가능하며 처음 반복할 때 데이터베이스 쿼리를 실행한다. for e in Entry.objects...

    [DRF - Django Rest Framework] Serializer Field 톺아보기(2)

    2022.11.30 - [Django] - [DRF - Django Rest Framework] Serializer Field 톺아보기(1)를 이어서 작성. 2.1.5 allow_null allow_null이 설정이 안 돼있을 경우 값이 입력되지 않는다면 일반적으로 error가 발생한다. True로 설정할 경우 값이 입력되지 않더라도 유효성 검사(직렬화 단계의)를 통과한다. 하지만 model field에서 null 설정이 되어 있지 않다면 error가 발생한다. 2.1.6 source 필드를 채우는 데 사용할 속성의 이름이다. self와 같은 인수만 사용하거나 URLField(source='get_absolute_url') 또는EmailField(source='user.email') 와 같은 속성을 순회..