일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
- 데코레이터
- TypeScript
- Django
- queryset
- 머신러닝종류
- unionfind
- 백준
- 리액트
- 알고리즘
- js
- vitepwa
- QuerySetAPI
- db
- 싸피셜
- SSAFYcial
- git
- Python
- react
- 플로이드워셜
- 싸피10기
- Javascript
- PWA
- sqld
- VITE
- 셀프넘버
- SQL
- pwa적용하기
- 싸피
- 14658
- SSAFY
- Today
- Total
Meme's IT
[Django] 로그인(1) 로그인, 로그아웃 본문
# Django Authentication System
사용자 인증과 관련된 기능을 모아 놓은 시스템
이 기능을 통해, 로그인 / 로그아웃을 구현할 수 있다.
# 사전 작업
0. https://memezz.tistory.com/24에서 작성한 프로젝트에서 이어집니다..
1. 'accounts' app생성
django 내부에서 쓰이는 함수에서도 accounts라는 이름으로 사용되기 때문에 app이름은 accounts로 하는 것이 권장됨
# accounts/urls.py
from django.urls import path
from . import views
app_name = 'accounts'
urlpatterns = [
]
# crud/urls.py
# 프로젝트 urls에도 경로 추가
urlpatterns = [
path('accounts/', include('accounts.urls')
]
2. Custom User model로 대체하기
# django에는 기본적으로 제공하는 user model이 있음
settings.py > INSTALLED_APPS를 확인해보면 'django.contrib.auth'라는 앱이 그 역할을 함
근데 왜 굳이 대체해서 써야할까?
→ 개발자가 직접 수정하기가 힘들기 때문에 상속받아서 수정할 애들만 수정하는 형식으로 사용해준다!
2 - 1. AbstractUser을 상속받는 커스텀 User 클래스 생성
# accounts/models.py
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
pass # 당장은 수정할 게 없으니 우선 pass
2 - 2. 새로 작성한 커스텀 User가 사용할 User라는 사실을 알려주기
# settings.py
AUTH_USER_MODEL = 'accounts.User'
2 - 3. admin 사이트에서도 확인하기 위해 추가해주기
# accounts/admin.py
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User
admin.site.register(User, UserAdmin)
☆주의☆
프로젝트 중간에는 AUTH_USER_MODEL을 변경할 수 없음!!!
만약, 이미 프로젝트가 진행되고 있다면, DB를 초기화 후 진행
그러므로 꼭! 프로젝트 진행 전에 User 모델을 대체해줘야 함
# 로그인 구현해보기
login = Session을 만드는 과정
로그인 인증에 사용할 데이터를 입력 받는 built-in form인 AuthenticationForm()을 이용해서 구현
1. url부터 작성
# accounts/urls.py
app_name = 'accounts'
urlpatterns = [
path('login/', views.login, name='login'),
]
2. views.py에서 login 함수 만들어주기
AuthenticationForm먼저 import해주고 작성
# accounts/views.py
from django.contrib.auth.forms import AuthenticationForm
def login(request):
if request.method == 'POST':
pass
else:
form = AuthenticationForm()
context = {
'form': form,
}
return render(request, 'accounts/login.html', context)
3. Template/accounts 위치에 login.html 생성 및 작성
<h1>로그인</h1>
<form action="{% url "accounts:login" %}" method="POST">
{% csrf_token %}
{{ form.as_p }}
<input type="submit">
</form>
로그인 화면을 확인할 수 있다.
4. login 함수 완성하기
from django.contrib.auth import login as auth_login # 내장함수 login을 import해주기
def login(request):
if request.method == 'POST':
form = AuthenticationForm(request, request.POST)
if form.is_valid():
auth_login(request, form.get_user()) # 인증된 사용자를 로그인해주는 함수
return redirect('articles:index') # 로그인이 완료되면 메인페이지로 돌아감
else:
form = AuthenticationForm()
context = {
'form': form,
}
return render(request, 'accounts/login.html', context)
5. 로그인 링크 만들기
(앞 프로젝트와 이어지므로 articles/index가 메인페이지, 이어지지 않는다면 다른 메인페이지에서 링크 만들어주기)
<!-- articles/index.html에 추가해주기 -->
<a href="{% url "accounts:login" %}">LOGIN</a>
# 로그아웃 구현해보기
logout = 세션을 지워주는 과정
1. url작성
# accounts/urls.py
app_name = 'accounts'
urlpatterns = [
path('login/', views.login, name='login'),
path('logout/', views.logout, name='logout'),
]
2. views.py에서 logout 함수 만들어주기
logout(request)함수
- 현재 요청에 대한 Session Data를 DB에서 삭제
- 클라이언트의 쿠키에서도 Session ID를 삭제
from django.contrib.auth import logout as auth_logout # 로그아웃함수 import
def logout(request):
auth_logout(request)
return redirect('articles:index')
3. articles/index.html에 로그아웃 버튼만 만들어주기(html따로 필요없음)
하지만, DB를 건들이는 역할을 하므로 a태그가 아닌, form을 이용해서 POST방식 + 토큰을 이용해서 만들어 줘야한다.
<form action="{% url "accounts:logout" %}" method="POST">
{% csrf_token %}
<input type="submit" value="LOGOUT">
</form>
# 참고: html에서 로그인된 유저이름 출력하는 방법
<h3>{{ user.username }}님 안녕하세요!</h3>
{{user.username}} 태그를 이용하면 현재 로그인된 유저의 이름을 출력할 수 있다.
'BackEnd > Django' 카테고리의 다른 글
[Django] 로그인(3) 비밀번호 바꾸기 (0) | 2023.10.05 |
---|---|
[Django] 로그인(2) 가입/탈퇴/수정 (0) | 2023.10.05 |
[Django] 쿠키와 세션 (0) | 2023.10.04 |
[Django] Static Files & Media Files (0) | 2023.10.04 |
[Django] view 함수 update (0) | 2023.10.04 |