본문 바로가기

Coding/[Django]

[Django] 개발자 꿈나무 나롱이 🌱 # 3. Django project 만들기(Black, django-stubs, mypy 설치)

 

 

 

오늘은 Black, django-stub, mypy를 설치하고 test까지 실행하는 것을 post해보려고 한다!

 

 

 

 

 

 

 

Black은 code formatter!

 

실무에서는 하나의 프로젝트를 여러명이서 개발하게 되는데,

이 때 개발자들끼리 일관된 코드스타일을 유지하도록 도와주는 역할을 한다!

 

 

 

 

 

각설하고, poetry로 설치를 해보자!

 

 

터미널 창에 poetry add black==22.1.0 을 입력한다.

(2022년 04월 기준으로 - 버전 22.3.0 - 아래에 오류 뜬 것도 작성해놨으니 확인하기!)

 

 

poetry run black . 을 입력하여 실행한다.

 

 

 

 

 

 

 

또잉... 갑자기 error 발생!!!!!!

 

 

ImportError가 떴다...

error message대로 구글링해보니, black의 최신버전이 22.1.0이 아니라서 오류가 나는 것 같았다...

그리하여... 얼른 black github로 갔다...!

https://github.com/psf/black

 

 

 

 

 

README.md 파일을 보니 아니나다를까...

 

버전이 업그레이드 되어있었다...

 

 

 

 

 

 

 

 

이를 토대로 터미널에 poetry add black==22.3.0 으로 다시 입력 후

poetry run black . 으로 실행하니

 

 

아주 성공적으로 실행되었다!

 

 

 

 

 

 

난 딱히 black의 필요성을 아직 잘 못 느껴서 블로그에는 딱히 실행 이미지를 올리진 않을 거지만....

간단히 말해서 Black

 

 

 

1. 따옴표를 비롯한 기호들을 일괄적으로 통일시켜주고,

black은 문자열에서 사용되는 따옴표로 ""(큰따옴표)를 사용한다.

 

 

 

 

2. code가 길어지면 가독성이 떨어지니 코드 한 줄이 일정 line-length를 넘어가면 줄바꿈을 자동으로 해준다.

 

 

 

line-length설정은 쉽게 pyproject.toml 파일에다가

 

 

이런 식으로 맨 마지막에 추가를 해주어도 된다.

 

 

 

코드 설명을 잠깐 하자면,

pyproject.toml에서 [ ](대괄호) 부분을 section이라 부른다.

 

따라서 tool.black이라는 섹션안에서 black에 대한 설정을 할 수 있는 건데,

여기서 나는 line-length를 120으로 설정해준 것이다.

 

 

 

Pycharm이나 VSCode에서 이러한 설정은 따로 가능하다!

 

 

 

 

 

 

Pycharm의 경우

 

설정 - 에디터 - 코드스타일 - Hard wrap at 에서 설정할 수 있다.

 

 

 

 

 

 

 

 

VSC의 경우

 

settings - search (python formatting black) - Add Item 에서 설정할 수 있다.

 

 

 

 

 

 

 

 

 

 

다음은 django-stub와 mypy 설치과정이다!

 

 

 

 

2022년 04월을 기준으로 했을 때,

 

터미널에 poetry add django-stubs==1.10.1 mypy==0.942 를 입력하여 설치해준다.

 

 

django-stubs을 mypy로 같이 사용하기 위한 설정방법은

https://github.com/typeddjango/django-stubs

여기에 설명되어있다.

 

이런식으로!

 

 

 

 

 

 

여기서 잠깐!

django-stubs는 mypy와 django를 같이 사용할 수 있도록 도와주는 친구다!

 

 

 

 

 

 

 

 

https://mypy.readthedocs.io/en/stable/config_file.html#using-a-pyproject-toml-file

 

위의 링크를 눌러 들어가게 되면 pyproject.toml로 mypy를 설정하는 방법이 서술되어있다.

 

 

 

 

여기에 override라는 내용이 나온다.

module별로 mypy설정을 따로따로 할 수 있다 -> 요런 걸 override라고 부른다.

 

 

 

 

 

 

 

 

이걸 사용하는 방법은

 

 

[[tool.mypy.overrides]]

이런 식으로 section에 대괄호 두개를 쓰고 mypy.overrides를 쓴다.

 

그 다음에 설정할 module의 path를 적어주면 된다.

 

 

 

 

 

 

 

 

이를 토대로 작성한 코드는 다음과 같다.

 

 

주석을 통해 코드에 대한 설명은 다 적어놓았다.

 

 

 

 

 

 

이제 poetry run mypy . 을 터미널에 입력하여 실행을 해보자!

실행을 하면 아래와 같은 오류들이 생긴다.

 

 

3가지 오류를 차근차근 해결해나가보자!

 

 

 

 

첫번째 에러 : Need type annotation for "ALLOWED_HOSTS"

 

변수에 대해서 type hint(type annotation)이 없다는 뜻!

 

 

 

 

 

ALLOWED_HOSTS 리스트는 문자열을 멤버로 가지는 리스트이다.

type hint를 적어보자.

 

 

type hint는 어렵지 않다! 변수에 :을 붙이고, 그 변수에 무엇이 들어갈 지 type을 적어주면 된다.

멤버로 문자열을 가지는 리스트 -> [str] 이라고 적어주면 끝!

 

 

 

 

 

 

 

두번째 에러 : Function is missing a return type annotation

 

return type을 적어보자!

 

 

return type -> Dict[str, int]

Dict의 경우에는 key가 문자열, value가 integer이다.

 

 

 

 

 

 

세번째 에러 : Function is missing a type annotation for one or more arguments

 

 

request에 HttpRequest를 입력하여준다.

왜 HttpRequest를 적는지는 설명 안해주시기에 검색 고고링!!!

 

 

 

 

 

HttpRequest ?

 

 

django는 request와 response객체로 server와 client가 정보를 주고 받는다.
django는 client로부터 request를 받으면 urls.py를 확인한다.

 


이 때, django가 일치하는 패턴을 찾으면 urls.py에서 정의한 특정 view 함수의 첫번째 인수로 해당 HttpRequest객체를 사용하고,
해당 view는 결과값을 HttpResponse나 JsonResponse로 객체에 담아 전달한다.

 


이를 위해 django는 django.http module에서 HttpRequest와 HttpResponse API를 제공한다.

 

 

- 출처 : https://velog.io/@jcinsh/Django-request-response & django docs -

 

 

 

이렇게 에러가 난 사항들을 수정하고 나서 다시 poetry run mypy . 을 실행하면!

 

 

Success message가 뜬다!

 

 

 

 

이렇게 하면 오늘의 목표였던

black, django-stubs, mypy 설치 및 실행 완료!

 

 

 

 

 

 

다음 포스트에는 test를 실행해보고 import 순서를 정렬해주는 isort도 설치해보며,

black, isort, mypy, test를 한번에 실행시키는 test.sh 파일을 만드는 방법에 대해서 정리할 예정이다!

 

 

 

 

 

 

 

 

 

 

✿ 도움이 되셨다면 댓글과 공감, 구독 눌러주세요오오오옷 ✿