Django 로 게시판 만들기(6). 회원가입 페이지 구현을 위한 views.py 작성하기 2

.·2020년 7월 24일
0

게시판만들기

목록 보기
6/21

1. POST 요청 시 코드 작성 첫번째

앞서 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']}>

2. 가지고 온 값으로 BoardMember 객체 생성하기.

쉽게 말해 회원가입 시키는 최종 단계이다.

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 페이지를 확인했더니 내가 가입한 새로운 계정들이 들어가 있는 것을 볼 수 있었다.

3. 비밀번호와 비밀번호 확인의 입력값이 다를 때

비밀번호를 입력하고 비밀번호 확인 입력이 다른 상태에서 회원가입을 하게 만들면 안된다.
이 때는 에러 메시지를 반환하여야 하므로 상단에 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 파일에 어떻게 실제 보여지게 할까?

4. error 메시지를 현재 form 에서 보이게하기

그럼 이 res_data 를 출력하는 코드를 html 파일에 만들어 보자.
적당한 위치에 회원가입 제목 아래 쯤에 row를 하나 만들고,

 <div class="row mt-5">
        <div class="col-12">
          {{error}}
        </div>
      </div>

그러면 이제 위에 사용한 키와 error 가 매핑이 된다.

		
profile
.

0개의 댓글