회원가입
def signup(request):
# signup 으로 POST 요청이 왔을 때, 새로운 유저를 만드는 절차를 밟는다.
if request.method == 'POST':
# password와 confirm에 입력된 값이 같다면
if request.POST['password1'] == request.POST['password2']:
# user 객체를 새로 생성
user = User.objects.create_user(username=request.POST['username'], password=request.POST['password1'], email = request.POST['id'])
# 로그인 한다
auth.login(request, user)
return redirect('/')
# signup으로 GET 요청이 왔을 때, 회원가입 화면을 띄워준다.
return render(request, 'signup.html')
django는 회원가입을 쉽게 할 수 있는 라이브러리가 제공되어 있어 회원가입 구현을 쉽게 할 수 있다.
django는 일반적으로 메소드를 GET으로 받기때문에
post라는 요청이 왔을 때의 조건을 달아준다.
GET과 POST 둘 다 서버에 Request 요청을 하는 메소드이나,
두개의 차이는 클라이언트의 요청이 URL 뒤에 추가되어서 요청되는 것이다.
GET은 SELECT쿼리문과 유사한 성격ㅇ로 POST보다 전송속도가 빠른 것이 특징이다.
GET방식은 캐싱에 의하여 빠른 효과를 낸다.
POST는 URL이 아닌 BODY에 데이터를 넣어서 숨겨진 상태로 전송해주는 방식이다.
회원가입은 아이디와 비밀번호가 URL에 노출이 되면 안되므로 POST 방식으로 요청으로 받을 것이다.
회원가입 폼은
위와 같이 구성하였으며,
Password와 Password확인이 같을때만 회원가입이 이루어져야하므로
조건문에
if request.POST['password1'] == request.POST['password2']:
조건을 달아주었으며, 그 때 회원이 추가될 수 있도록
django 라이브러리인 create.user를 이용하여 회원가입해주었다.
user = User.objects.create_user(username=request.POST['username'],
password=request.POST['password1'],
email = request.POST['id'])
회원가입이 완료되면 바로 로그인이 된 상태로 전환할 수 있도록
auth.login(request, user)
를 이용하여 위 요청이 다 성공되었다면, 로그인을 해주는것으로 설정.
return render(request, 'signup.html')
signup 함수가 실행되었을때, signup.html폼으로 이동할 수 있도록 구현
로그인
def login(request):
# login으로 POST 요청이 들어왔을 때, 로그인 절차를 밟는다.
if request.method == 'POST':
# login.html에서 넘어온 username과 password를 각 변수에 저장한다.
username = request.POST['username']
password = request.POST['password']
# 해당 username과 password와 일치하는 user 객체를 가져온다.
user = auth.authenticate(request, username=username, password=password)
# 해당 user 객체가 존재한다면
if user is not None:
# 로그인 한다
auth.login(request, user)
return redirect('/')
# 존재하지 않는다면
else:
# 딕셔너리에 에러메세지를 전달하고 다시 login.html 화면으로 돌아간다.
return render(request, 'login.html', {'error' : 'username or password is incorrect.'})
# login으로 GET 요청이 들어왔을때, 로그인 화면을 띄워준다.
else:
return render(request, 'login.html')
로그인 역시 아이디와 비밀번호를 입력하였는데
URL에 노출이 되면 안되므로 POST요청이어야 한다.
회원가입을 하였으면 django 안의 user라이브러리에 회원가입한 유저가 생성이 되었으므로,
user안의 데이터와 일치하면 로그인이 되도록 설정한다.
코드설명은 주석과 같다.
로그아웃
def logout(request):
# logout으로 POST 요청이 들어왔을 때, 로그아웃 절차를 밟는다.
auth.logout(request)
return redirect('/')
회원의 로그인 된 상태를 없애주기 위해 로그아웃 절차도 밟아준다.
현재 로그인 상태인지, 로그아웃 상태인지 구별은
텍스트 문구를 로그인과 로그아웃으로 구별을 했지만,
코드 상에서
{% if user.is_authenticated %}
<a href="{%url 'mypage' %}" class="nav-link">마이페이지</a>
<form method="POST" action="{%url 'logout' %}">
<span class="nav-item cta"><a href="{%url 'logout' %}" class="nav-link">로그아웃</a></span>
</form>
{% else %}
<span class="nav-item cta"><a class="nav-link" href="{% url 'login' %}">로그인</a></span>
{% endif %}
조건문으로 user가 인증 되었을때와 아닐때로 구분을 하였다.