이전 ver.3 포스팅
https://dingwan0331.tistory.com/100
[Django] Westagram 회원가입 기능 작성해보기 ver.2
이번에는 저번에 블로깅한 View의 다른버전입니다. 기본적인 흐름은 아래와같습니다. 유효성검사를 modules로 구현 직접 모듈 내에서 return이 아닌 raise로 예외발생 except란에 각 예외별로 리턴값을
dingwan0331.tistory.com
1.모듈 import의 구분
import하는 Package들은 크게 3가지로 분류합니다.
- 첫번째: 내장 package
- 두번째: pip로 install 한 외부 package
- 세번째: 직접 작성한 package
이렇게 분류에 별로 분리해서 공백 1줄을 줘서 공백을 맞춰줍니다.
from django.http import JsonResponse
from django.views import View
from users.models import User
이런코드가 있다면
from django.http import JsonResponse
from django.views import View
from users.models import User
이런식의 컨벤션을 유지해준다.
2.import * 자제하기
* 모든걸불러오는 에스터리스크는 해당 모듈에서 불러온 module까지도 다 끌고 오기에 많은 부담이됩니다..
Django는 이미 많은것들이 연결되고 많은기능을 지원하는 무거운 프레임워크이기때문에 최대한 필요한것만 담백하게 불러와서 사용하도록 하자!
3. align을 맞출때는 가장 긴 코드에 공백 한칸만
이경우에는 wecode Coding Convention이기에 강제성은 없지만 보기엔 훨씬 깔끔해집니다.
data = json.loads(request.body)
username = data['username']
first_name = data['first_name']
last_name = data['last_name']
이런 코드가
data = json.loads(request.body)
username = data['username']
first_name = data['first_name']
last_name = data['last_name']
이렇게 변하면 크게 봤을때 훨씬 깔끔해지네요
4.예외 처리는 정확히 특정하여서
내가 했던 방식의 예외처리는 아래와 같았습니다.
#validators.py
result = {'message':None}
if 조건식:
result['message'] = '해당에러메세지'
raise
#views.py
except:
return JsonResponse(result,status = 400)
validator에서 유효성검사를 통과하지 못하면 'message'라는 키를 가지고있는 result 딕셔너리에 value로 에러에 해당하는 메세지를 넣어서 JsonResponse로 반환하였다 이에 대한 문제가있었습니다.
에러메세지가 None으로 뽑힌다면 내가 의도하지 않은 Error 가 발생하는것이고 이런방식은 결국 디버깅이 불가능해집니다.
사실 꾀나 많은 도전으로 나올수있는 예외 사항들을 대부분 인지하고 있어서 자만했던것같네요.
수정본은 아래와 같습니다.
#validators.py
if 조건식:
raise ValidationError(message = 'Invalid email')
#views.py
except ValidationError as e:
return JsonResponse({'message':e.message},status = 400)
Django Built-in Exception 인 ValidationError의 message 속성을 사용하여서 처리하였습니다.
KeyError 나 ValueError 같은 경우에는 message 속성이없기에 리턴할때 아래와 같은 방식을 사용하여야합니다.
#validators.py
if 조건식:
raise ValueError('Invalid email')
#views.py
except ValueError as e:
return JsonResponse({'message':str(e)},status = 400)
이렇게 하면 내기준으로는 괄호의 메세지만 리턴했지만
원래라면 python 에서 나오는 모든에러메세지가 장황하게 나오는걸로 알고 있어 추천하는 방법은 아닙니다.
5.validator들은 class가 아닌 모듈로
사실 validator들을 모듈로사용할까 클래스로 사용할까 고민이 많았습니다.
나는 그 두방법중에 뭐가 더 효율적이고 이득인지 알지못하는 바보이기때문에 어떤 이유로 선택해야하는지 잘 모릅니다.
피드백 과정에서 느낀거는 class란 class만의 특성과 class안의 변수,함수들의 유기적인 관계를 이용하거나
class 상속과 같이 class 만의 이점을 살리지 않는다면 모듈로 사용하는걸로 결론을 지었습니다.
6.url 경로는 폴더명으로!
url경로는 폴더명과 일치 시킵니다.
폴더명을 url에 일치시키던 url을 폴더명에 일치시키던 둘다 관점의 차이같습니다.
단순한 백엔드 개발자 혼자만의 생각으로 결정 할 수 있는일은 아닌것 같습니다.
프로젝트폴더와 앱폴더 그리고 View클래스의 이름은 해당 프로젝트와 기능을 기반으로 네이밍 됩니다.
결국 url 역시 기능과 리소스가 내포된 경로이기에 기획 부분에도 포함되어있다고 생각되어 프로젝트시 팀회의가 중요할 것 같습니다.
'Python > Django' 카테고리의 다른 글
[Django]장고에서 앱이름 변경하기 (0) | 2022.11.26 |
---|---|
[Django] Models class Manager (0) | 2022.06.26 |
[Django] Westagram 회원가입 기능 작성해보기 ver.3 (0) | 2022.06.13 |
[Django] Westagram 회원가입 기능 작성해보기 ver.2 (0) | 2022.06.13 |
[Django] Westagram 회원가입 기능 작성해보기 ver.1 (0) | 2022.06.12 |