앞서 html 에서 만든 input 의 'name' 값으로 정보들이 전달된다.
"username", "email", "password", "re_password" 같은 name 필드의 값을 key 로 해서 전달이 된다.
elif request.method == 'POST':
username = request.POST['username']
email = request.POST['email']
password = request.POST['password']
re_password = request.POST['re_password']
위의 코드처럼 값을 가져와 변수에 할당해 주었다.
그런데 "request.POST" 는 대체 어떻게 생겼나 보자.
<QueryDict: {'csrfmiddlewaretoken': ['9V8klaKrdrhZ1B50xrff7jiVSWoSk5SXzo85851ubGonQjG6oc9rC0hnNRl20WLN'],
'username': ['teddyjungdd'], 'password': ['asd'], 're_password': ['asd']}>
쉽게 말해 회원가입 시키는 최종 단계이다.
member 를 생성할 것이므로 현재 경로에 위치한 모델의 클래스를 가져오자.
from .models import BoardMember
클래스 변수, 객체를 생성한다. BoardMember 의 username과 password, email 을 불러와서 member 라는 변수에 할당해 주는 과정이다.
member = BoardMember(
username=username,
password=password,
email=email,
)
member.save()
username=username 에서 오른쪽 username 은 위에 username = request.POST['username'] 의 username 이다. 왼쪽에 username 은 이 값을 할당받는 변수의 username 이다.
그리고 member.save() 로 데이터 베이스에 저장하는 코드를 작성했다.
runserver 를 통해 보여지는 회원가입 창에서 username, password, re_password 를 작성 후 submit 버튼을 눌러 가입 처리를 하고 Admin 페이지를 확인했더니 내가 가입한 새로운 계정들이 들어가 있는 것을 볼 수 있었다.
비밀번호를 입력하고 비밀번호 확인 입력이 다른 상태에서 회원가입을 하게 만들면 안된다.
이 때는 에러 메시지를 반환하여야 하므로 상단에 HttpResponse 를 불러와야 한다.
from django.http import HttpResponse
간단하다.
if password != re_password:
return HttpResponse('비밀번호가 다릅니다')
테스트를 해보면 원래 입력했던 회원가입 창에서 '비밀번호가 다릅니다' 를 출력하고 싶었던 거였는데, 전혀 다른 새 창에서 비밀번호가 다르다는 문구가 뜬다.
패스워드가 같지 않다면 에러 메시지를 담을 변수를 만든다.
왜냐하면 이를 통해서 회원가입 창 html 코드에 연결할 것이기 때문이다.
res_data = {}
if password != re_password:
res_data['error'] = '비밀번호가 다릅니다.'
else:
member = BoardMember(
username=username,
password=password,
email=email,
)
member.save()
return render(request, 'register.html', res_data)
res_data 를 print 하면 아래와 같다.
{'error': '비밀번호가 다릅니다'}
그리고 기존에 return render(request, 'register.html') 에 res_data 를 추가해 준다. render 함수에 res_data 라는 변수의 데이터를 전달할 수가 있다.
그러면 res_data 가 html 코드로 전달이 된다.
그런데 이 res_data 를 html 파일에 어떻게 실제 보여지게 할까?
그럼 이 res_data 를 출력하는 코드를 html 파일에 만들어 보자.
적당한 위치에 회원가입 제목 아래 쯤에 row를 하나 만들고,
<div class="row mt-5">
<div class="col-12">
{{error}}
</div>
</div>
그러면 이제 위에 사용한 키와 error 가 매핑이 된다.