westagram backend 미션6 까지 코드리뷰 정리

개발자 강세영·2022년 5월 13일
0

TIL

목록 보기
29/65

Q&A

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에서 임포트하는것보다 의존성은 적고 확장성이 있는 좋은 방법이다.

  • 조건문이 길어지는데 비슷한 처리를 할 경우 딕셔너리 언패킹을 활용할 수 있다.

로그인시 어떠한 잘못된 접근을 시도하였을 때, 어떤 에러가 나는지 블로깅해주세요.

  • 패스워드나 이메일 중 하나를 빈 값으로 넣었을때는 KeyError
  • 틀린 key값(email이 아니라 e-mail이나 password가 아니라 pass 등)을 넣으면 KeyError
  • 패스워드와 이메일 둘다 빈 값으로 넣으면 INVALID_USER
  • 패스워드와 이메일 중 하나라도 틀리면 INVALID_USER
  • 이메일이 DB에 없으면 User.DoesNotExists 예외 처리를 할 수 있음
  • POST로 아무 입력이 없으면 JSONDecodeError가 뜸
  • View에 정의한 내용이 POST밖에 없는데 GET으로 보내면 Method Not Allowed(404 또는 405)
  • JsonResponse의 status를 상황에 알맞은 값으로 넣는것이 좋다
  • except Exception: 으로 모든 예외 처리를 하는것은 테스트 용도로는 괜찮지만 배포하기 전에는 상황에 맞는 적절한 예외처리를 하는게 좋다.

0개의 댓글