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 |
이런 식으로 모양을 맞춰주면 쓸만할 것입니다. 원하는대로 수정하여 사용가능합니다. 비밀번호만을 이용한 로그인도 구현할 수 있을 것입니다.
'Python' 카테고리의 다른 글
[django] django form 사용법 (0) | 2018.02.11 |
---|---|
[django] django channels 사용법 (0) | 2018.02.10 |
[django] django 에서 recaptcha 사용 (0) | 2018.02.05 |
[django] 간단한 웹 게임 프로그램 작성에 필요한 설정 (0) | 2018.02.04 |
[django] GeoDjango 와 django-rest-framework 연동 (0) | 2018.02.04 |