[Django] 회원가입 / 로그인, 로그아웃

cdwde·2021년 7월 23일
0

Django

목록 보기
13/13

🎈 Django의 user authentication system

장고 공식 문서 - 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/

0개의 댓글