TIL60 - 연휴동안 Django 공부

Kiyong Lee·2022년 2월 2일
0

Django

목록 보기
34/35

연휴동안 Django 공부


출든한지 어언 1주일..!

회사의 코드 컨벤션을 보며, 스스로 조금씩 구현해 나아가고 있다.

이건 1달 회고록 때 상세히 ㅎㅎ

회사에서 공부하며, 어떻게보면 주니어로서 부족한 건 당연하지만 그래도 내 자신이 아쉬워서

연휴동안 꽉 머리속에 꽉 잡고 싶은 것들을 적었었다.

  1. gettext lazy
  2. APIView
  3. rest_framek.status
  4. middleware
  5. pytest

1. gettext_lazy

django.utils.translation에 있는 gettext_lazyugettext_lazy이다.

다만, 공식문서에 따르면 Django 4.0에서 ugettext로 시작하는 메소드는 모두 제거 되었다.

gettext 는 쉽게 말해 내가 작성한 텍스트로 번역을 해준다는 기능이다.

다만, 뒤에 lazy가 붙을 경우, 변환되어야 할 때 동작한다는 것이다.

Django ORM 최적화에서 Lazy Loading 역시, 필요 시점에 SQL을 호출하는 것과 같은 맥락으로
이해하면 될 것 같다.


2. APIView

Django에서는 view를 통해서 HTTP요청을 처리한다.

위코드에서 배울때는, django.viewsView 클래스를 import해서 사용했지만

지금은 DRFAPIView를 사용하게 되었다.

DRF공식문서에 따르면, 일반적인 ViewAPIView의 다른 점이 나와있다.

  1. 요청은 DjangoHttpRequest 인스턴스가 아닌, REST Framework의 인스턴스이다.

  2. 응답은 DjangoHttpResponse가 아닌, REST FrameworkResponse를 리턴한다.

  3. APIException으로 적절한 예외처리를 할 수 있다.

  4. 요청은 인증/인가가 이루어지고 dispatching이 이루어진다.

4번에 대한 설명이 코드로 나와있는데,

dispatch를 통해 HttpMethod 이름에 맞는 메소드로 위임하기 전에,
authentication_classespermission_classes로 인증/인가가 가능하다는 것이다.

나는 위코드에서 인증/인가 작업을 할 때, decorator를 만들어서 선언했었는데
여기서는 라이브러리를 이용해서 할 수 있다는 장점이 있다.


class ListUsers(APIView):
    """
    View to list all users in the system.

    * Requires token authentication.
    * Only admin users are able to access this view.
    """
    authentication_classes = [authentication.TokenAuthentication]
    permission_classes = [permissions.IsAdminUser]

    def get(self, request, format=None):

3. rest_framework.status

from rest_framework import status
...
return Response(data, status=status.HTTP_404_NOT_FOUND)

DRF에서 statusimport한다면, 유형별 상태코드를 설정할 수 있다.

이 것의 장점은 내가 잘못된 응답코드를 반환하는 걸 막아준다.

예를 들어, 위코드에서 나는

return JsonResponse({'message':'created'}, status=201)

이렇게 응답코드를 직접 입력했었는데, 그러다보니 응답코드를 잘 몰라서 잘못 보낸적이 있었다.

하지만 status를 사용한다면, 응답코드를 내가 선택할 수 있어서 프론트엔드와 소통할 때

문제가 발생하지 않는다는 장점이 있다.


4. middleware

corsheaders를 사용할 때, INSTALLED_APPSMIDDLEWARE에 관련 부분을 추가한다.

문득, middleware에 대해 이게 뭘까라는 생각이 들었다.

middleware란 무엇일까?
-> HTTP 요청/응답 처리 중간에서 작동하는 시스템이며,
      요청이 들어올 경우, 미들웨어를 거쳐 URL에 등록되어 있는 View로 연결해주고,
      응답 역시 미들웨어를 거쳐 내보낸다.

그리고 corsheader를 등록할 때, 제일 위에 등록하라고 들었다.

미들웨어의 순서가 되게 중요하기 때문인데,

1) HTTP request가 들어올 경우, 위에서 아래로 미들웨어를 적용시키고
2) HTTP RESPONSE가 나갈 경우, 아래에서 위로 미들웨어를 적용시키기 때문이다.

공식문서에 미들웨어를 커스터마이즈 할 수 있다고 나와있지만, 여기선 다루지 않을 예정이다.


5. pytest

Unit Test를 하기 위한 프레임워크이다.

위코드에서는 프로젝트 생성 시, 만들어진 tests.py에 테스트코드를 작성한 후

python manage.py test app이름

이렇게 했는데 pytest 설치 후, 코드 작성한 뒤 실행하면 결과가 나온다.

명령어를 입력할 때, pytest -vv를 입력하면, 틀렸을 때 어떤 부분이 틀렸는지 자세하게 나온다.


profile
ISTJ인 K-개발자

0개의 댓글