def signup(request):
form = UserCreationMultiForm(request.POST, request.FILES)
if request.method == 'POST':
if request.POST['user-password1'] == request.POST['user-password2']:
if form.is_valid():
user = form['user'].save()
profile = form['profile'].save(commit=False)
profile.user = user
profile.email = request.POST['profile-email']
profile.save()
print('회원가입성공')
return redirect('signin')
else:
print('회원가입 실패')
messages.info(request, '회원가입에 실패했습니다.')
return render(request, 'signup.html')
else:
print('비밀번호가 달라서 실패')
messages.info(request, '비밀번호가 다릅니다.')
return render(request, 'signup.html')
return render(request, 'signup.html', { "form": form })
<form class="form-signin" method="POST" action="{% url 'signup'%}">
{%csrf_token%}
<img class="mb-2" src="{% static 'img/tc-logo.png' %}" alt="" width="100%">
<div class="hr-sect">Join us</div>
<br>
<div class="form-group">
<label for="formGroupExampleInput">이메일</label>
<input type="email" name="profile-email" class="form-control" maxlength="50" id="id_profile-email">
</div>
<div class="form-group">
<label for="formGroupExampleInput">비밀번호</label>
<input type="password" name="user-password1" class="form-control" required id="id_user-password1">
</div>
<div class="form-group">
<label for="formGroupExampleInput">비밀번호 확인</label>
<input type="password" name="user-password2" class="form-control" required id="id_user-password2">
</div>
<div class="form-group">
<label for="formGroupExampleInput">이름</label>
<input type="text" name="profile-nick" class="form-control" autofocus required id="id_profile-nick">
</div>
<div class="form-group">
<label for="formGroupExampleInput">생년월일</label>
<input type="text" name="profile-birth_date" class="form-control" id="id_profile-birth_date">
</div>
<button class="btn btn-lg btn-primary btn-block" type="submit">가입하기</button>
</form>
저의 회원가입 로직입니다.
user-password1과 user-password2가 같으면 회원가입이 진행이 되는데
django.utils.datastructures.MultiValueDictKeyError: 'user-password2'
해당 오류가 나왔습니다.
해당 오류는 Django에서 제공하는 User모델을 사용할 때 발생합니다.
그건 사용할 user-name을 못찾았기 때문입니다.
어떠한 유저에 대해 password1과 password2를 넣을 거냐???
라는 Django의 User 모델의 대답 때문에 오류가 나는 거였습니다.
<input type="text" name="user-username" class="form-control" autofocus required id="id_user-username">
해당 user-username을 넣어주면 에러가 안 납니다...
저는 email을 받아 email을 username으로 사용해주려 했었는데
해당 예외처리를 하지 않아서 발생했으니
조심하세요 T-T
아래는 아이디 중복체크까지 추가한 수정 버전입니다.
저는 models에서 email 컬럼을 아예 삭제했지만
아래처럼 view단에서 해결할 수 있습니당
def signup(request):
form = UserCreationMultiForm(request.POST, request.FILES)
if request.method == 'POST':
userCheck = request.POST['user-username']
if request.POST['user-password1'] == request.POST['user-password2']:
if form.is_valid():
user = form['user'].save()
profile = form['profile'].save(commit=False)
profile.user = user
profile.email = request.POST['user-username']
profile.save()
print('회원가입 성공')
return redirect('signin')
else:
if User.objects.get(username=userCheck):
print('아이디 중복')
messages.info(request, '아이디가 중복됩니다.')
return render(request, 'signup.html')
print('회원가입 실패')
messages.info(request, '회원가입에 실패했습니다.')
return render(request, 'signup.html')
else:
print('비밀번호가 달라서 실패')
messages.info(request, '비밀번호가 다릅니다.')
return render(request, 'signup.html')
return render(request, 'signup.html', { "form": form })