django 는 모델을 만들고 그 모델을 이용해 object를 만듭니다. object를 가져오는 방법은 여러가지가 있습니다. 그 중 object가 존재하지 않을 경우의 에러를 다루는 방법으로는 DoesNotExist의 도움을 받는 방법을 고를 수 있습니다.

from django.shortcuts import get_object_or_404, get_list_or_404
 
cs

물론 이런 shortcuts 를 가져와서 처리하는 방법도 있습니다. 하지만 이번엔 DoesNotExist를 써 보겠습니다.


1. DoesNotExist 사용방법

try:
    model_your_model = ModelYourModel.objects.get(you=happy)
except ModelYourModel.DoesNotExist:
    pass
cs


이렇게 DoesNotExist 를 이용해서 예외 구문을 만들게 됩니다.

pass 라고 쓴 자리에 예외가 발생할 경우 하고 싶은 걸 작성하면 됩니다. 


2. Backend 사용방법


그리고 django에서 authenticate 함수를 쓸 일이 있습니다. 이건 인증 함수입니다. settings.py에서 그 흔적을 찾을 수 있습니다.


AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend',
)
cs

이 부분입니다. 이 부분이 django 의 authentication 을 관장합니다. 이 ModelBackend를 살펴보겠습니다.

 

class ModelBackend:
 
    def authenticate(self, request, username=None, password=None, **kwargs):
        if username is None:
            username = kwargs.get(UserModel.USERNAME_FIELD)
        try:
            user = UserModel._default_manager.get_by_natural_key(username)
        except UserModel.DoesNotExist:
            UserModel().set_password(password)
        else:
            if user.check_password(password) and self.user_can_authenticate(user):
                return user
 
    def get_user(self, user_id):
        try:
            user = UserModel._default_manager.get(pk=user_id)
        except UserModel.DoesNotExist:
            return None
        return user if self.user_can_authenticate(user) else None
cs


authenticate 함수가 username 과 password 를 받아서 user를 return 하는 것을 알 수 있습니다. 

그러므로 이 backend를 받은 다음에 authenticate 함수를 재정의해 주면 인증에 사용할 수 있게 됩니다.


from django.contrib.auth.backends import ModelBackend
 
class CustomAuthBackend(ModelBackend):
 
    def authenticate(self, username=None, password=None):
        pass
cs


이런 식으로 모양을 맞춰주면 쓸만할 것입니다. 원하는대로 수정하여 사용가능합니다. 비밀번호만을 이용한 로그인도 구현할 수 있을 것입니다.

+ Recent posts