터칭 데이터
장고(Django) Form을 사용하여 User 생성하기 본문
사용자를 만드는 기능을 두가지 방법으로 구현해보려합니다.
첫번째는 장고에서 제공하는 기능으로, 두번째는 restframework에서 Serializesr를 이용해 사용자를 만드는 방법입니다.
장고에서 제공하는 UserCreationForm 기능으로 회원 만들기
지금까지 우리는 장고에서 제공하는 기능은 polls앱에서 DRF에서 제공하는 기능은 polls_api에서 구현해 왔습니다.
그로므로 이번에는 polls앱에서 시작하겠습니다.
polls/view.py
# ..생략..
from django.views import generic
from django.urls import reverse_lazy
from django.contrib.auth.forms import UserCreationForm
# ..생략..
class SignupView(generic.CreateView):
form_class = UserCreationForm
success_url = reverse_lazy('user-list')
template_name = 'registration/signup.html'
위와 같은 코드들을 추가해줍니다.
generic은 rest_framework에서의 generics와 비슷한 역할을 합니다. 일단은 RESTful API를 구축하느냐 여부에 따라 선택해 사용한다고 알아주세요.
UserCreationForm은 유저의 회원가입을 위한 폼을 제공합니다. django.contrib.auth가 회원에 관한 기능들을 제공한다고 했었죠?
reverse_lazy는 회원가입이 성공하고 어디로 갈 것인지를 나타냅니다. reverse_lazy에 인자로 URL 별칭을 적어주면 회원가입 성공시 해당 URL로 연결됩니다. 'user-list'라는 URL 별칭은 사용자(유저 or User) 목록을 볼 수 있는 곳으로 우리가 지난 시간 polls_api/urls.py에서 정의한 users/ URL패턴입니다.
polls_api/urls.py

위와 같이 사용자 목록을 볼 수 있는 곳에 URL별칭으로 user-list를 주었습니다. 이제 polls/views.py의 reverse_lazy가 잘 작동할 것입니다.
그런데 polls/views.py의 SignupView에서
class SignupView(generic.CreateView):
form_class = UserCreationForm
success_url = reverse_lazy('user-list')
template_name = 'registration/signup.html'
template_name이 보이나요? 이름과 할당되는 값을 보면 추측할 수 있듯이 templates폴더에 registration이라는 폴더를 만들고 그 안에 signup.html이라는 템플릿에서 회원가입을 진항하겠다는 뜻입니다.
그러면 signup.html로 갈 수 있는 URL을 설정을 해줘야겠군요! 아까 회원 목록을 조회하는 기능이 polls_api/views.py에서 작성되어서 reverse_lazy()의 URL은 polls_api/urls.py에서 설정했지만 이번에는 polls/urls.py에서 진행하겠습니다.
polls/urls.py

polls/signup 패턴의 URL은 views.py의 SignupView에서 처리합니다. SignupView는 기존의 메서드 기반이 아닌 클래스 기반 뷰(Class Based View)라 as_view()가 붙는 것도 복습겸 확인할 수 있습니다. 이제 해당 URL 패턴으로 접속시 SignupView가 template_name으로 보내줄 것입니다.
polls(앱)/templates/registration/signup.html과 같은 경로로 템플릿 파일을 만들고

장고에서 post를 사용할 때 보안을 위해 csrf_token를 사용한다는 것은 이미 배웠고 {{ form.as_p }}가 조금 생소하실텐데요.
우리가 polls/views.py에서 정의해준
class SignupView(generic.CreateView):
form_class = UserCreationForm
success_url = reverse_lazy('user-list')
template_name = 'registration/signup.html'
UserCreationForm으로 생성된 form_class를 사용하겠다는 뜻이라고 알아주시면 좋습니다.
이제 우리가 정의한 회원가입 URL으로 가면

회원가입 창이 자동으로 생성됐습니다.
비밀번호와 비밀번호 확인의 입력이 다르거나 이미 있는 사용자 이름을 사용하는 경우 등의 예외처리도 전부 되어있습니다.
회원가입을 조건에 맞춰 정상적으로 진행하면

우리가 의도한대로 사용자 목록으로 돌아갑니다. id 1번, 2번 사용자는 어드민 페이지 실습에서 만들었던 관리자이고 id 3번인 일반 사용자를 장고의 기능을 통해 만들어보았습니다.
'장고 (Django)' 카테고리의 다른 글
장고(Django) User 권한 관리 (0) | 2023.11.05 |
---|---|
장고(Django) Serializer를 사용하여 User 생성하기 (0) | 2023.11.05 |
장고(Django) User 관리하기 (0) | 2023.11.05 |
장고(Django) User 추가하기 (0) | 2023.11.05 |
장고(Django) 정참조와 역참조 (3) | 2023.11.05 |