회원가입 부분까지 완료 하였고 회원가입 후 로그인 페이지를 만들고 로그인이 완료되면 홈페이지로 이동 하는 것을 구현했다.
1. login.html파일을 생성하고 아래와 같이 만든다
<html>
<head>
<meta charset="utf-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1, shrink-to-fit=no"
/>
<!-- CDN 이용 -->
<!-- <link
rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T"
crossorigin="anonymous"
/> -->
<link rel="stylesheet" href="/static/bootstrap.min.css/" />
<script
src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
crossorigin="anonymous"
></script>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"
integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1"
crossorigin="anonymous"
></script>
<script
src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"
integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM"
crossorigin="anonymous"
></script>
</head>
<body>
<div class="container">
<div class="row mt-5">
<div class="col-12 text-center">
<h1>로그인</h1>
</div>
</div>
<div class="row mt-5">
<div class="col-12">
{{ error }}
</div>
</div>
<div class="row mt-5">
<div class="col-12">
<form action="." method="POST">
{% csrf_token%}
<div class="form-group">
<label for="username">사용자 이름</label>
<input
type="text"
class="form-control"
id="username"
placeholder="사용자 이름"
name="username"
/>
</div>
<div class="form-group">
<label for="password">비밀번호</label>
<input
type="password"
class="form-control"
id="password"
placeholder="비밀번호"
name="password"
/>
</div>
<button type="submit" class="btn btn-primary">로그인</button>
</form>
</div>
</div>
</div>
</body>
</html>
2. sampleuser 앱 내부 urls.py 에 새로 만든 html파일인 login.html 경로를 등록
from django.urls import path
from . import views
urlpatterns = [
path('register/', views.register),
path('login/', views.login)
]
3.views.py에 register 함수를 만들었던 것과 같이 login함수를 만들어준다
views.py에 추가
from .models import Sampleuser
from django.http import HttpResponse
from django.contrib.auth.hashers import make_password, check_password
from django.shortcuts import render, redirect# 홈으로 이동하기 위해 redirect 추가로 적어준다
def login(request):
if request.method == 'GET':
return render(request, 'login.html')
elif request.method == 'POST':
username = request.POST.get('username', None)
password = request.POST.get('password', None)
res_data = {}
if not (username and password): # ID,PW 입력하지않은 경우
res_data['error'] = '모든 값을 입력해야합니다.'
else: # ID,PW검사
sampleuser = Sampleuser.objects.get(
username=username) # ID를 DB로부터 가져오는 과정
# 뒤의 username이 이번에 입력받은 username
if check_password(password, sampleuser.password): # 비밀번호가 일치한경우
request.session['user'] = sampleuser.id
return redirect('/') # redirec를 이용해 로그인 성공 이후 웹페이지로 이동
# '/'만 써주면 현재 웹사이트의 루트로 이동함 즉 홈페이지로 이동
else: # 비밀번호가 틀린경우
res_data['error'] = '비밀번호가 틀립니다.'
return render(request, 'login.html', res_data)
def register(request):
if request.method == 'GET': # 주소를 치고 들어갔을때의 경우
return render(request, 'register.html')
elif request.method == 'POST': # 등록을 눌렀을때의 액션
username = request.POST.get('username', None) # 초기값 None으로 설정
useremail = request.POST.get('useremail', None)
password = request.POST.get('password', None)
re_password = request.POST.get('re-password', None)
res_data = {} # 에러를 받을 딕셔너리 만들어줌
if not(username and useremail and password and re_password): # 값 3개가 다들어있지않는경우
res_data['error'] = '모든 값을 가지지않았습니다'
elif password != re_password:
res_data['error'] = '비밀번호가 다릅니다'
else:
sampleuser = Sampleuser(
username=username,
useremail=useremail,
password=make_password(password) # 암호화 후 저장
)
sampleuser.save()
# 데이터 포스트를 하고 다시 html페이지를반환
return render(request, 'register.html', res_data)
# res_data를 줘야 에러메시지 출력됨
# 리퀘스트와 반환하고싶은 html파일 리턴
4.홈의 경로를 전체 프로젝트 내부에 있는 urls.py에 추가해준다
from sampleuser.views import home 도 함께 적어준다
from django.contrib import admin
from django.urls import path, include
from sampleuser.views import home # 홈페이지를 추가해주기위해서
urlpatterns = [
path('admin/', admin.site.urls),
path('sampleuser/', include('sampleuser.urls')),
path('', home) # 루트 추가
]
5.views.py에 home 의 기능추가 (3번에 전체 views.py가 있기 때문에 함수부분만 작성함)
def home(request):
user_id = request.session.get('user') # session에서 아이디를 뺴옴
# 로그인 할때 session에 넣었던 키가 id값이므로user
if user_id:
sampleuser = Sampleuser.objects.get(pk=user_id) # pk는 기본키
return HttpResponse(sampleuser.username)
return HttpResponse('Home!')
회원가입완료 후 로그인 실패 시
로그인 성공시 홈페이지로 이동
'IT > Django' 카테고리의 다른 글
Django 기초 5. CDN 이용 페이지 테마 변경 (0) | 2019.10.07 |
---|---|
Django 기초 4.회원필드 수정해보기 (0) | 2019.10.07 |
Django 기초 3.회원가입 페이지 만들기 (2) | 2019.10.06 |
Django 기초 2.데이터베이스 관리 및 장고 어드민 활성화 (0) | 2019.10.01 |
Django 기초 1.설치 및 프로젝트 구성 (0) | 2019.10.01 |