안녕하세요
이번 시간에는 이전 포스팅에 이어서 Login과 Logout 기능을 추가하는 실습을 진행하겠습니다.
0. 사전 준비하기 (템플릿 확장, Bootstrap4)
[Django] Django에서 템플릿 확장의 개념과 템플릿 확장 적용하는 방법 실습하기 (tistory.com)
[Django] Bootstrap4에 대해 알아보고 Django에 Bootstrap4 부트스트랩 적용하기 (tistory.com)
실습을 진행하기 앞서 개발 환경을 맞추고자 Django 템플릿 확장과 Bootstrap4를 적용해야 합니다.
1. Login, Logout View 만들기
# accounts/views.py
from django.contrib import auth
from django.contrib.auth import authenticate
from django.contrib.auth.models import User
from django.shortcuts import render, redirect
def signup(request):
if request.method == 'POST':
if request.POST['password1'] == request.POST['password2']:
user = User.objects.create_user(
username=request.POST['username'],
password=request.POST['password1'],
email=request.POST['email'],)
auth.login(request, user)
return redirect('/')
return render(request, 'signup.html')
return render(request, 'signup.html')
def login(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
auth.login(request, user)
return redirect('board')
else:
return render(request, 'login.html', {'error': 'username or password is incorrect.'})
else:
return render(request, 'login.html')
def logout(request):
auth.logout(request)
return redirect('home')
def home(request):
return render(request, 'home.html')
위 코드는 Django 웹 프레임워크를 사용하여 구현된 로그인, 로그아웃, 홈페이지 렌더링 기능을 제공하는 함수들입니다.
(1) login(request) 함수는 POST 요청을 받았을 때 사용자가 제출한 로그인 정보를 검증하여 인증을 수행합니다.
(2) request.method를 사용하여 현재 요청이 POST 요청인지 확인합니다.
(3) request.POST를 사용하여 POST 요청으로 전송된 데이터를 가져옵니다.
(4) authenticate() 함수를 사용하여 사용자가 입력한 정보가 올바른지 확인합니다.
(5) 인증이 성공하면 auth.login() 함수를 사용하여 사용자를 로그인 시킵니다.
(6) 로그인에 실패하면 오류 메시지와 함께 로그인 페이지를 다시 렌더링합니다.
(7) logout(request) 함수는 현재 로그인 된 사용자를 로그아웃 시키고 홈페이지로 리디렉션합니다.
(8) home(request) 함수는 홈페이지를 렌더링합니다.
(9) render() 함수를 사용하여 템플릿 파일(home.html)을 렌더링합니다.
각 함수에서 request 매개변수는 HTTP 요청(request) 객체를 의미합니다. auth 모듈은 Django에서 제공하는 인증 관련 기능을 담당하는 모듈입니다. 각 함수의 동작을 제대로 수행하기 위해서는 auth 모듈이 미리 설정되어 있어야 합니다.
2. Login, Home 템플릿 만들기 (accounts/templates/login.html, home.html)
다음은 `accounts/templates/login.html`, `accounts/templates/home.html`의 디렉터리 구조입니다.
<!-- accounts/templates/home.html -->
{% extends 'base.html' %}
{% load bootstrap4 %}
{% block content %}
<div>
<h3><a href="signup">회원가입</a></h3>
<h3><a href="login">로그인</a></h3>
<h3><a href="logout">로그아웃</a></h3>
</div>
{% endblock %}
다음은 [회원가입, 로그인, 로그아웃]에 대한 Home 템플릿입니다.
<!-- accounts/templates/login.html -->
{% extends 'base.html' %}
{% load bootstrap4 %}
{% block content %}
<div class="wrapper">
<div style="text-align: center;">
<h1>로그인</h1>
<form method="POST">
{% csrf_token %}
아이디:
<br>
<input name="username" type="text">
<br>
비밀번호:
<br>
<input name="password" type="password">
<br><br>
<input type="submit" class="btn btn-primary" value="Login">
</form>
</div>
</div>
{% endblock %}
다음은 로그인 템플릿입니다. POST 메서드를 사용하여 로그인을 진행합니다.
3. URLconf 설정하기 (accounts/urls.py)
# accounts/urls.py
from django.urls import path
from .views import *
urlpatterns = [
path('home/signup/', signup, name='signup'),
path('home/login/', login, name='login'),
path('home/logout/', logout, name='logout'),
path('home/', home, name='home'),
]
URLconf 설정입니다. `accounts/urls.py`에 다음과 같이 회원가입, 로그인, 로그아웃, 홈에 대해서 라우팅 설정을 합니다.
4. 서버 실행하기
python manage.py runserver
서버를 실행시키고 127.0.0.1/accounts/home에 접속합니다.
다음과 같이 [127.0.0.1:8000/accounts/home/]에 접속하면 만들어 준 템플릿이 반환되는 것을 확인할 수 있습니다.
[회원가입]을 눌러 회원가입이 정상적으로 동작하는지 확인합니다.
[로그인]을 눌러 로그인이 정상적으로 동작하는지 확인합니다.
마지막으로 [로그아웃] 버튼을 눌러 로그아웃이 되는지 확인합니다. 아직 템플릿에서 로그아웃에 대해 따로 만들어주지 않았기 때문에 육안으로 확인되지 않지만 로그아웃이 되었다는 메세지가 터미널에 출력되니 확인할 수 있습니다.
이번 시간에는 Django에서 로그인과 로그아웃 기능을 추가하는 실습을 진행했습니다.
감사합니다.
'Framework > Django' 카테고리의 다른 글
[Django] Django에서 Page에 대해 알아보고 페이징 처리하기 Pagination (2) | 2021.02.24 |
---|---|
[Django] Django 게시판 구현하기(3) Sign Up, Login, Logout, Style 추가 (0) | 2021.02.23 |
[Django] Django 회원가입 구현하기(1) Sign Up, UserCreationForm (2) | 2021.02.23 |
[Django] Django 게시판 구현하기(2) Update, Delete (0) | 2021.02.08 |
[Django] Django 게시판 구현하기(1) Create (0) | 2021.02.08 |
클라우드, 개발, 자격증, 취업 정보 등 IT 정보 공간
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!