[django] 1st project review (modeling)

6315 단어 djangoBackendBackend

🖥 1차 프로젝트 진행하면서 받은 피드백 정리

  • 1차 프로젝트: fruitz_company
  • scope: modeling

1
decorator의 inner function 인자 설정

decorator를 작성할 때, inner function의 인자로 self, request, *args, **kwargs 4가지를 default처럼 넣어왔다.
-> why: 확장성 고려 (예를 들어 login_decorator에서 비회원을 추가로 처리할 때)
-> 하지만 지금의 경우는 애초에 추가 인자가 들어갈 일이 없기 때문에 self, request까지 넣는 것이 더 좋은 상황.

2
암호화한 비밀번호를 decode해서 db에 넣는 이유

bytes로 변환된 비밀번호는 b'...'로 포장된다.
그런데 이를 decode처리(즉, str형태로 바꾸고 겉에 씌여진 b'...'를 제거)하는 이유는 checkpw 작업을 위해서다.
-> decode 처리하지 않으면, b'...'까지 포함해서 str로 저장됨
-> 이 상태에서 checkpw(encode)를 하면 Error:Invalid salt가 뜸

3
About 컨벤션

: 함수는 동사 형태로 (password_validator > validate_password)
: 클래스명은 camelcase로 (Order_item > OrderItem)
: 변수명은 더 명확하게 (check_password > is_checked)
: 띄어쓰기 check (변수 - 조건문 사이도 한 줄 띄워주기)
: empty line 제거하기

4
django 각 모듈의 역할은 철저하게 seperated상태여야 한다

views가 하는 역할을 models나 다른 모듈에서 하면 바람직하지 않다.
예를 들어, error를 return할 때 작성된 코드는 아래와 같다.

#validator.py 
from .views import ValidationError

REGEX_PASSWORD = '^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,}$'

def validate_password(password):
    if not re.match(REGEX_PASSWORD, password):
        raise ValidationError('INVALID_PASSWORD')
        
#views.py 
class SignUpView(View):
    def post(self, request):
        try:
            data = json.loads(request.body)
            user         = data['user']
            password     = data['password']

            validate_password(password)
            ...
            ...
            return JsonResponse({'message':'SUCCESS'}, status=201)
        except KeyError:
            return JsonResponse({'message':'KEY_ERROR'}, status=400)
        except ValidationError as e:
            return JsonResponse({'message':e.message}, status=400)

validator.py에서, 사용자가 입력한 비밀번호가 양식에 맞지 않는 경우 (숫자/문자/특수문자 조합 8자리 이상) ValidationError를 raise한다.
하지만 에러 메세지+status code를 직접 return하지 않으며, 이는 views.py에서 반환하도록 설정했다.
(validate_password 실행 > 규격에 맞지 않을 시, ValidationError를 raise(메세지: "INVALID_PASSWORD") > 이를 읽은 views.py는 e라는 변수에 ValidationError를 담아 메세지와 함께 status code 반환)

에러 메세지+status code를 return하는 것은 views.py가 담당한다.
따라서, views.py 외의 파일에 작성하면 옳지 못한 코드인 셈.

좋은 웹페이지 즐겨찾기