Q: 장고에서 제공하는 이메일 등의 유효성 검증 기능과 파이썬 패키지를 이용하는 방법의 차이점이 궁금합니다.
실무에선 보통 어떤 유효성 검증 방법을 많이 사용하는지 궁금합니다.
A: 장고에서 제공하는 Field Validator는 장고의 Form 기능과 관련돼있는데 Form은 프론트엔드 기능이라 잘 쓰이지 않는다. Model, View만 연습해보는것이기 때문에 현재 위스타그램 과제는 정규식 모듈을 임포트해서 하는게 맞다.
코드가 길어지면 괄호나 백슬래시로 줄바꿈을 하는데 둘 중 어떤게 가독성이 더 좋은 방법일까요?
is 와 ==이 다른것을 알고 있을것, is None을 써도 되는 이유는 re.match가 object 아니면 None 값을 리턴하는데, None True False 같은 것들은 is를 쓸 수 있다.
True/False를 비교할 때는 if문에 변수만 사용하도록 한다.
True/False만을 비교한다면 if A: 또는 if not A:를 쓰면되고 == True, False 등은 사용할 필요가 없다.
동등성(단순히 값만 비교하는 경우)을 검증할 때는 == 혹은 != 같은 연산자를 사용하도록 한다.
동일성(객체의 고유 메모리 주소로 비교하는 경우)을 검증할 때는 is나 is not을 사용한다.
회원가입 View에서 유효성 검증 조건문에서 if...elif...elif 같이 elif가 계속 나왔는데 유효성이 안맞는 경우 바로 리턴하는 코드이기 때문에 elif를 쓸 필요가 없고 그냥 계속 if를 쓰면된다, 마지막에 else도 없어도 되는 상황이라면 없애는게 좋다.
try except가 좋은 이유:
if문을 쓴다면 여러개의 input keyerror 에러처리를 위해 if문을 많이 써야한다
try except를 쓰면 모든 keyerror에 대해 한줄로만 처리할 수 있어서 필요한 코드가 적어진다
User.save() vs User.objects.create():
회원가입 View인데 굳이 save()를 쓸필요가 없다, objects.create()로 바꿀것, 객체 변수 만들기는 필요한게 아니라면 할 필요 없다. user = User(...) 이런거 안쓰고 바로 User.objects.create 해도 됨
Class View(View):와 def 사이엔 빈 줄 삽입할 필요없음
if문에서 filter() vs filter().exists():
필터는 조건에 맞는 모든 객체를 반환하고 exists()는 단순히 존재하는지 아닌지만 반환하므로 로그인 View에서 이메일이 맞는지 확인할때는 exists()를 쓰는게 맞음
except json.JSONDecodeError: import json 된 상태에서 이렇게 쓰면 굳이 JSONDecodeError만을 위한 임포트를 하지 않아도 됨
로그인을 위한 정보를 json.loads(request.body)이걸로 받는데, request.body를 파이썬에서 확인해보면 bytes 타입 이다. 그래서 아무 값을 입력하지 않으면 request.body를 JSON으로 디코딩할 수 없어서 JSONDecodeError가 나오게 된다.
존재하지 않는 계정에 대한 User.DoesNotExists 에러 핸들링을 할 수 있다. 이걸 예외 처리하면 비밀번호가 맞는지 확인해보는 코드만 써도 된다.
from django.conf import settings: JWT 등을 위한 환경변수를 임포트할때 단순히 my_settings에서 임포트하는것보다 의존성은 적고 확장성이 있는 좋은 방법이다.
조건문이 길어지는데 비슷한 처리를 할 경우 딕셔너리 언패킹을 활용할 수 있다.