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

.·2020년 7월 24일
0

게시판만들기

목록 보기
7/21

1. 비밀번호가 평문으로 저장되는 것을 바꾸기

Admin 페이지에서 확인해 보면 입력한 비밀번호가 평문으로 표기되어 있다.
이 비밀번호를 암호화 해서 저장하는 경우를 만든다.

작성하고 있는 views.py 코드 상단에 make_password 를 import 해 온다.

from django.contrib.auth.hashes import make_password

...
...
...

    member = BoardMember(
            username=username,
            password=make_password(password),
            email=email,
        )
        member.save()

비밀번호를 password=password 로 그대로 담는 것이 아니라 make_password() 라는 함수를 사용했다. 이는 회원 가입 시 입력한 password 를 암호화 한 뒤 저장하게 한다.

관리자 페이지를 확인해 보면 적용 이후 가입한 계정의 패스워드는 암호화 되어 저장된 것을 확인할 수 있다.

그런데 문제가 있다.

2. 회원가입 필드를 비우고 가입하는 경우에 대한 예외처리

앞서 만든 회원가입 필드에 아무 입력도 하지 않고 submit 을 누르면 아무 에러도 나지 않았다.

관리자 페이지를 들어가보면 그냥 빈 문자열로 회원가입된 사용자가 생성된 것을 확인할 수 있다.

아까 패스워드와 패스워드 확인이 서로 다를 때처럼, 값들을 필드에 입력하지 않은 상황에서도 마찬가지로 예외 처리를 해 주어야 한다.

기존 코드를,

elif request.method == 'POST':
    username = request.POST['username']
    email = request.POST['email']
    password = request.POST['password']
    re_password = request.POST['re_password']

아래와 같이 바꾼다.

elif request.method == 'POST':
    username = request.POST.get('username', None)
    email = request.POST.get('email', None)
    password = request.POST.get('password', None)
    re_password = request.POST.get('re_password', None)

request.POST 가 딕셔너리 형태이므로 key 가 없으면 에러가 난다.
None 을 지정하는 것은 키에 대한 값이 없으면 기본값으로 None 을 지정한다는 의미라 한다.

근데 사실 print 를 해 보면,
username = request.POST['username'] 과
username = request.POST.get('username', None) 은 동일하게 나오는데 무슨 차이인지 잘 모르겠다.

어쨋든 수정하고 res_data = {} 아래에 조건문을 추가한다.

if not (username and email and password and re_password):
    res_data['error'] = '모든 값을 입력해야 합니다'

이제 빈 문자열이 들어오게 되면 회원가입 창에 에러 메시지가 뜬다.

3. 전체 views.py 코드

from django.shortcuts import render
from django.http import HttpResponse
from django.contrib.auth.hashers import make_password

from .models import BoardMember

def register(request):
    if request.method == "GET":
        return render(request, 'register.html')

    elif request.method == "POST":
        #print (request.POST)
        username    = request.POST.get('username', None)
        #print(username)
        password    = request.POST.get('password', None)
        #print(password)
        re_password = request.POST.get('re_password', None)
        #print(re_password)
        email       = request.POST.get('email', None)


        res_data = {}
        if not (username and password and re_password and email):
            res_data['error'] = '모든 값을 입력하세요!'

        elif password != re_password:
            res_data['error'] = '비밀번호가 다릅니다'
            print(res_data)

        else:
            member = BoardMember(
                username    = username,
                email       = email,
                password    = make_password(password)
            )
            member.save()

        return render(request, 'register.html', res_data)
profile
.

0개의 댓글