본문 바로가기
DEV/Web 개발

Web 개발 :: Django 머신러닝 프로젝트 Code Review _ User_TIL#37

by 올커 2022. 10. 26.

■ JITHub 개발일지 37일차

□  TIL(Today I Learned) ::

Django 머신러닝 프로젝트 Code Review _ User

   1) 문제점 및 몰랐던 점(+내가 했던 시도)

 (1) 유저 기능 중 회원가입 기능을 구현할 때에 중복된 유저 이름을 사용하는지 확인해야 할 때가 있다.

    이 때 아래와 같이 get_user_model()을 사용하는데 사용하는 모델 이름인 User를 그대로 받아오는 것과 무슨 차이인지 궁금했다.

email_exist_user = auth.get_user_model().objects.filter(email=email)
username_exist_user = auth.get_user_model().objects.filter(username=username)

 (2) is_authenticated와 auth.authenticate의 사용 용법의 차이를 알지 못하고 사용하고 있었다.

 (3) 입력란에 공백이 발생하는 경우 일관적으로 == '' 를 사용하고 있었는데, 다른 방법으로도 가능한지 궁금했다.

 (4) 모듈을 임포트할 때 가장 하단까지 임포트할 경우 리소스를 덜 먹는지 확인해볼 필요가 있었다.


   2) 해결 및 알게된 점

 (1) 결론적으로 get_user_model()을 사용하던 User를 사용하던 차이가 없다. 드물지만 User라는 모델이름을 사용하지만 전혀 다른 내용을 갖고 있고, 다른 모델(예를 들어 Account)이 실제 유저모델이라면? 사용자는 혼동할 수 있기 때문에 settings.py에서 정의하는 AUTH_USER_MODEL을 지정하여 get_user_model()를 사용하는 것이 이후 유지보수에 안전하다.

 (2) is_authenticated는 사용자 인증이 완료되었는지 여부를 확인해준다. 출력값은 Bool(True or False)이다. auth.authenticate는 아래와 같이 사용자 권한을 직접 부여해야할 때 사용한다.

username = User.objects.get(email=email)
        user = auth.authenticate(request, username=username, password=password) 
        if user is not None:  
            auth.login(request, user)
            return redirect('/')
        else:
            return render(request, 'user/account/signin.html', {'error':'이메일 혹은 패스워드를 확인 해주세요.'})

 *is_authenticated는 로직을 바꾸어 is_anonymous로 사용할 수도 있고, 개념을 조금 바꾸어 활성화 여부를 확인하는 is_active를 사용할 수도 있다.

 *request.user의 경우 사용자 로그인이 되었을 땐 사용자 정보값을 갖고, 아닐경우 AnonymousUser값을 가진다.

   request.user.is_authenticated의 경우 사용자 로그인이 되었을 땐 True, 아닐 경우 False값을 가진다.

 

 (3) 아래 코드에서 email이나 username이 공백일 경우 에러를 발생시킨다. 이 때 == '' 으로 공백을 확인하는데, 테스트해본 결과 is None이나 == None으로 바꾸어 사용해도 정상적으로 동작하는 것을 확인할 수 있었다.

if password != repeatpassword:
            return render(request, 'user/account/signup.html', {'error': '패스워드를 확인 해 주세요.'})
        else:
            if email == '' or username == '' :
                return render(request, 'user/account/signup.html', {'error': '이메일과 사용자 이름은 적어주셔야 합니다.'})

 

 (4) 현재까지 확인한 바로는 모듈을 임포트할 때 가장 하단까지 임포트하는 것이 리소스를 덜 먹는다. 또한, 코드의 가독성도 좋아지기 때문에 직접 함수를 임포트하는 것이 좋다. 하지만 작은 프로젝트의 경우는 큰 차이는 없을 수 있다.

반응형

댓글