장고 공식 문서 - Using the Django authentication system
authenticate()
: 존재하는 User인지 확인login()
: 사용자 로그인 시키기user.is_autheticated
: 로그인 했는지 확인회원가입 / 로그인, 로그아웃 관련 앱 생성
py manage.py startapp accounts
앱 등록
#settings.py
INSTALLED_APPS = [
'accounts',
]
url 연결하기
#post/urls.py
from django.urls import include
urlpatterns = [
path('', include('accounts.urls')),
]
#accounts/urls.py
from . import views
urlpatterns = [
path('signup/', views.signup, name='signup'),
path('login/', views.login, name='login'),
path('logout/', views.logout, name='logout'),
]
기존 앱에 회원가입 / 로그인, 로그아웃 버튼 만들기
<!--post/templates/post/index.html-->
{% if user.is_authenticated %}
{{user.username}}님 안녕하세요
<a href = '{% url "logout" %}'>로그아웃</a>
{% else %}
<a href = '{% url "login" %}' >로그인</a>
<a href = '{% url "signup" %}' >회원가입</a>
{% endif %}
로그인 form 만들기
<!--accounts/templates/login.html-->
<form action="{% url 'login' %}" method="POST">
{% csrf_token %}
<label for="username">아이디</label>
<input type="text" name="id">
<label for="password">비밀번호</label>
<input type="text" name="password">
<input type="submit">
</form>
회원가입 form 만들기
<!--accounts/templates/signup.html-->
<form action="{% url 'signup' %}" method="POST">
{% csrf_token %}
<label for="username">아이디</label>
<input type="text" name="id">
<label for="password">비밀번호</label>
<input type="text" name="password">
<label for="password">비밀번호 확인</label>
<input type="text" name="repeat">
<input type="submit">
</form>
회원가입 / 로그인, 로그아웃 기능 views 작성
#accounts/views.py
from django.shortcuts import render, redirect
from django.contrib import auth
def signup(request):
pass
def login(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = auth.authenticate(request, username=username, password=password)
if user is not None:
auth.login(request, user)
return redirect('home')
else:
return render(request, 'accounts/login.html')
else:
return render(request, 'accounts/login.html')
def logout(request):
auth.logout(request)
return redirect('home')
참고
https://docs.djangoproject.com/en/3.2/topics/auth/default/