계정생성(회원가입) 기능을 구현하기
장고의 django.contrib.auth
앱을 이용
계정생성 위한 링크 추가
<div class="row">
<div class="col-4">
<h4>로그인</h4>
</div>
<div class="col-8 text-right">
<span>또는 <a href="{% url 'common:signup' %}">계정을 만드세요.</a></span>
</div>
</div>
{% url 'common:signup' %}이 추가했으니까 매핑 필요함
from . import views
path('signup/', views.signup, name='signup'),
->> http://localhost:8000/pybo/common/signup/ 페이지가 요청되면 views.signup 함수가 실행. LoginView, LogoutView와 같은 뷰가 제공되지 않기 때문에 계정생성을 위한 뷰 함수를 직접 만들어야함
계정생성시 사용할 UserForm 작성
파일 추가 경로 : common/forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm
class UserForm(UserCreationForm):
email = forms.EmailField(label="이메일")
jango.contrib.auth.forms
모듈의 UserCreationForm
클래스를 상속
- UserCreationForm 의 속성
속성명 설명
username 사용자이름
password1 비밀번호1
password2 비밀번호2
email 속성을 추가
뷰에 signup 함수만들어 주기
POST요청인 경우에는 입력으로 전달받은 데이터를 이용하여 사용자를 생성
GET요청인 경우에는 common/signup.html 템플릿을 호출
authenticate와 login함수 : django.contrib.auth
패키지의 함수. 사용자 인증과 로그인
from django.contrib.auth import authenticate, login
from django.shortcuts import render, redirect
from common.forms import UserForm
def signup(request):
"""
계정생성
"""
if request.method == "POST":
form = UserForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
raw_password = form.cleaned_data.get('password1')
user = authenticate(username=username, password=raw_password)
login(request, user)
return redirect('index')
else:
form = UserForm()
return render(request, 'common/signup.html', {'form': form})
탬플릿 작성
login 페이지랑 비슷하게.
"로그인" 페이지로 이동할 수 있는 링크를 추가
오류를 표시하기 위해 form_errors.html 템플릿 파일을 include
UserForm의 속성인 사용자이름, 비밀번호1, 비밀번호2, 이메일에 해당되는 필드들을 추가