Form을 사용하여 User 생성하기

data_hamster·2023년 4월 29일
0
post-custom-banner

학습주제
사용자와 인증
Form을 사용하여 User 생성하기

학습내용

두가지로 사용자를 만들어본다.

  1. 장고에서 제공하는 기능

  2. 장고 REST framework을 통해서 시리얼라이저를 통해 생성

Django 기능으로 사용자 생성

이전에 polls에서 장고를 통해 question, choice를 구현
polls_api에서 장고 REST framework을 통해 question, choice를 구현.

Polls - views.py로 이동
from django.views import generic
이는 이전에 사용했었던
from rest_framework import generics와 매우 유사하다.

뒤에 s 안붙으니 주의

또 새로운 모듈을 import
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'

reverse_lazy('')는 우리가 urls에서 정의했던 이 이름을 기반으로 url을 만들어주는 역할.
전에 템플릿에서 detail.html의 form에서 action으로
"{% url 'polls:vote' question.id %}"
형식으로 url을 만들어 준 적이 있다. 이 때 이 form의 url 명시 후 name으로 url을 만들어내는 방식과 유사하다.

view를 만들었으니 view에서 사용할 템플릿을 만들어준다. polls 템플릿 폴더에 새로운 폴더 'registration' 생성, 안에 signup.html 생성

form method는 post
지난번 배운 csrf 토큰 생성
form.as_p 아까 만들었던 views에 form_class를 그대로 사용 따라서 폼을 우리가 따로 만드는 것이 아니라 안의 내용은 form_class 즉 이전에 구현된 기능으로 대체함

순서를 다시 정리하면,
Views에서 SignupView를 generic.CreateView를 상속받아 생성 안에 Usercreationform을 만들어줘서 템플릿 - registration - signup.html에 폼을 구현함. 마지막으로 url 연결까지 마무리.

view의 SignupView를 보면 template_name이 곧 뒤에 붙을 주소를 의미한다.

장고 셀을
켜서 아까의 reverse_lazy가 어떻게 동작하는지 확인한다.

users의 상대경로는 /rest/users로 잘 연결해준다. 앞으로 주소가 더 복잡해지기 때문에 저렇게 name을 사용한다.

이에 사용자를 만든 후에는 사용자 목록으로 보내고 싶다. 이는 polls_api - urls.py - path에 보면 name='user-list'가 있다. 이 url로 날리고 싶다.

아까 템플릿이 없다는 오류가 나서, 보통 이 경우는 뭔가 오타를 냈을꺼라 생각해서 1시간을 헤맨거 같다. 원인은 내가 실수로 templates 아래에 registration 폴더, 그리고 signup.html을 templates/polls/registration/sign.up 식으로 만들어버려, 템플릿 name 주소대로 따라가려고 해도 파일이 없다고 뜬 것이었다.


user1 계정 생성하니, user-list 화면으로 잘 넘겨주었다.
다시 singup 페이지로 돌아와

다시 user1을 만들면 에러메세지를 잘 출력해준다.

다음엔 Django REST framework을 사용한 유저 생성을 해본다.

profile
반갑습니다 햄스터 좋아합니다
post-custom-banner

0개의 댓글