출든한지 어언 1주일..!
회사의 코드 컨벤션을 보며, 스스로 조금씩 구현해 나아가고 있다.
이건 1달 회고록 때 상세히 ㅎㅎ
회사에서 공부하며, 어떻게보면 주니어로서 부족한 건 당연하지만 그래도 내 자신이 아쉬워서
연휴동안 꽉 머리속에 꽉 잡고 싶은 것들을 적었었다.
- gettext lazy
- APIView
- rest_framek.status
- middleware
- pytest
django.utils.translation
에 있는 gettext_lazy
와 ugettext_lazy
이다.
다만, 공식문서에 따르면 Django 4.0에서 ugettext
로 시작하는 메소드는 모두 제거 되었다.
gettext
는 쉽게 말해 내가 작성한 텍스트로 번역을 해준다는 기능이다.
다만, 뒤에 lazy
가 붙을 경우, 변환되어야 할 때 동작한다는 것이다.
Django ORM 최적화
에서 Lazy Loading
역시, 필요 시점에 SQL을 호출하는 것과 같은 맥락으로
이해하면 될 것 같다.
Django
에서는 view
를 통해서 HTTP
요청을 처리한다.
위코드에서 배울때는, django.views
의 View
클래스를 import
해서 사용했지만
지금은 DRF
의 APIView
를 사용하게 되었다.
DRF공식문서에 따르면, 일반적인 View
와 APIView
의 다른 점이 나와있다.
- 요청은
Django
의HttpRequest
인스턴스가 아닌,REST Framework
의 인스턴스이다.
- 응답은
Django
의HttpResponse
가 아닌,REST Framework
의Response
를 리턴한다.
APIException
으로 적절한 예외처리를 할 수 있다.
- 요청은 인증/인가가 이루어지고
dispatching
이 이루어진다.
4번에 대한 설명이 코드로 나와있는데,
dispatch
를 통해 HttpMethod
이름에 맞는 메소드로 위임하기 전에,
authentication_classes
와 permission_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):
from rest_framework import status
...
return Response(data, status=status.HTTP_404_NOT_FOUND)
DRF
에서 status
를 import
한다면, 유형별 상태코드를 설정할 수 있다.
이 것의 장점은 내가 잘못된 응답코드를 반환하는 걸 막아준다.
예를 들어, 위코드에서 나는
return JsonResponse({'message':'created'}, status=201)
이렇게 응답코드를 직접 입력했었는데, 그러다보니 응답코드를 잘 몰라서 잘못 보낸적이 있었다.
하지만 status
를 사용한다면, 응답코드를 내가 선택할 수 있어서 프론트엔드와 소통할 때
문제가 발생하지 않는다는 장점이 있다.
corsheaders
를 사용할 때, INSTALLED_APPS
와 MIDDLEWARE
에 관련 부분을 추가한다.
문득, middleware
에 대해 이게 뭘까라는 생각이 들었다.
middleware
란 무엇일까?
->HTTP
요청/응답 처리 중간에서 작동하는 시스템이며,
요청이 들어올 경우, 미들웨어를 거쳐 URL에 등록되어 있는View
로 연결해주고,
응답 역시 미들웨어를 거쳐 내보낸다.
그리고 corsheader
를 등록할 때, 제일 위에 등록하라고 들었다.
미들웨어의 순서가 되게 중요하기 때문인데,
1)
HTTP request
가 들어올 경우, 위에서 아래로 미들웨어를 적용시키고
2)HTTP RESPONSE
가 나갈 경우, 아래에서 위로 미들웨어를 적용시키기 때문이다.
공식문서에 미들웨어를 커스터마이즈 할 수 있다고 나와있지만, 여기선 다루지 않을 예정이다.
Unit Test
를 하기 위한 프레임워크이다.
위코드에서는 프로젝트 생성 시, 만들어진 tests.py
에 테스트코드를 작성한 후
python manage.py test app이름
이렇게 했는데 pytest
설치 후, 코드 작성한 뒤 실행하면 결과가 나온다.
명령어를 입력할 때, pytest -vv
를 입력하면, 틀렸을 때 어떤 부분이 틀렸는지 자세하게 나온다.