작성
·
161
답변 1
2
안녕하세요.
"model 이나 form은 그 관련 구현 상속받는거 밖에 못쓰는거지요?" 질문의 요지를 잘 파악하지 못하겠습니다. 좀 더 디테일하게 질문 부탁드립니다.
---
학습을 위해서 직접 FBV로 구현해보시는 접근이 아주 좋습니다. 하지만 실제 서비스에서는 auth앱의 LoginView뷰를 그대로 활용하시는 것이 보안에 유리합니다. 장고팀에서 유지보수하는 앱 이기에 보안이슈가 생기면 즉시 패치가 되거든요. 커스텀이 필요하시다면 LoginView를 상속을 받아서 커스텀 뷰를 만들거나, 관련 Form 클래스를 상속받은 폼 클래스를 만들어서 처리하는 방법을 추천드립니다.
장고 CBV 로직을 파악하는 방법은 장고 CBV 코드를 직접 보시고 파악하는 방법이 최고입니다. 코드 이상으로 설명하는 방법은 없습니다. 아래와 같은 사이트를 통해서 상속관계를 파악할 수는 있지만, 직접적으로 동작을 디테일하게 설명을 해주진 않습니다. 제가 강의에서 각 CBV 간의 상속 관계에 대해서 설명드린 것도 이런 이유에서 입니다. 장고의 철학을 알고 CBV 상속관계를 알면 그 CBV의 동작을 보다 쉽게 파악할 수 있고, 다양한 응용도 가능해집니다. 더불어 장고의 코드 스타일도 배울 수 있는 거죠.
https://ccbv.co.uk/projects/Django/3.0/django.contrib.auth.views/LoginView/
장고 기본앱인 auth를 통해 제공되는 LoginView는 장고의 철학대로 Form을 처리하는 뷰입니다. 그렇기에 Form을 처리하는 장고의 일반적인 프로세스를 그대로 따르고 있습니다. 그렇기에 FBV에서의 장고폼 처리 프로세스에 대해서 잘 이해하고 계시다면, 그 역할을 유추해보실 수 있습니다.
LoginView 에서 form_class, authentication_form, redirect_field_name, template_name, redirect_autheitcated_user, extra_context 등의 클래스 변수는 LoginView에서 디폴트로 참조하는 설정값입니다. 물론 설정을 오버라이딩할 수도 있습니다.
LoginView 내 각 함수들의 동작은 간략히 다음과 같습니다.
dispatch
get_success_url : 로그인 성공 시에 이동할 주소를 반환합니다.
get_redirect_url : 로그인 성공 시에 이동할 주소를 계산합니다.
get_form_class : 로그인을 처리할 Form 클래스를 반환합니다.
get_form_kwargs : Form 클래스의 인스턴스를 생성할 때 사용되는 인자를 dict 형태로 반환합니다.
form_valid : Form 처리의 가장 마지막 단계이며, form 유효성 검사가 성공했을 때 호출됩니다.
get_context_data : 템플릿 렌더링 시에 사용되는 값들을 dict 형태로 반환합니다.
살펴보시고, 다양한 질문 부탁드립니다.
화이팅입니다. :-)