지난 시간 : 화면(html form 태그)과 연결되는 URL, view, model
이번 시간 : DB 저장된 회원가입정보로 로그인하기
로그인
이란? Session
에 사용자 정보를 저장하는 것
Session
: 사용자 정보 저장하는 공간. 누가 요청했는지 확인할 수 있다. 인증
서버
<----(Session)----> 클라이언트
(요청)
url은 이미 연결되어 있어서
from django.shortcuts import render, redirect
from .models import UserModel
from django.http import HttpResponse # 상단에 추가. 화면에 글자를 띄울 때
(...)
def sign_in_view(request):
if request.method == 'POST': # POST라면
return HttpResponse("로그인 성공!")
elif request.method == 'GET':
return render(request, 'user/signin.html')
위 signin.html 관련 url은
HttpResponse("로그인 성공!")
화면을 보여준다.위 화면과 연결되는 signin.html에서 form 태그 수정한다.
어디에, 어떤 방법으로, 보안
{% extends 'base.html' %}
{% block title %}
로그인
{% endblock %}
{% block content %}
<div class="container">
<div class="wrap">
<h2 class="title-center"> 로그인</h2>
<form class="form-area" action="/sign-in/" method="post"> # form태그 실행되면 어디로? /sign-in/으로, 어떻게? POST요청
{% csrf_token %} # 보안 강화
<div class="form-group mt-2 mb-2">
<label for="username">이름</label>
<input type="text" class="form-control" id="username" name="username">
</div>
<div class="form-group mt-2 mb-2">
<label for="password">비밀번호</label>
<input type="password" class="form-control" id="password" name="password">
</div>
<hr>
<div style="float: right">
<button type="submit" class="btn btn-primary">로그인</button> # 버튼
<a href="/sign-up" class="btn btn-secondary">회원가입 페이지로</a>
</div>
</form>
</div>
</div>
{% endblock %}
submit button을 누르면 sign-in url로 POST 요청을 보낸다.
username과 pw를 DB로 가져간다.
from django.shortcuts import render, redirect
from .models import UserModel
from django.http import HttpResponse
(...)
def sign_in_view(request):
if request.method == 'POST':
username = request.POST.get('username', None)
password = request.POST.get('password', None)
# form에서 전송한 데이터들을 POST로 잘 가져오는 데 성공.
me = UserModel.objects.get(username=username)
if me.password == password: # password가 같다면
request.session['user'] = me.username
return HttpResponse("로그인 성공!") # 문자 출력
else: # 다르다면
return redirect('/sign-in') # 로그인 페이지로 redirect
elif request.method == 'GET':
return render(request, 'user/signin.html')
request.POST
에는 요청한 POST data가 다 저장돼 있다. 그 중에서 username과 pw를 가져온다.signin.html
input의 name과 같다. 동일하게 작성해야 html-views 연결된다.