로그인, 로그아웃, 회원가입 … 등등도 결국 accounts 로 하는 CRUD의 연장선이다!
💡
아래 링크를 누르면 블럭으로 이동합니다!
1. Login
- Login은 Session을 Create 하는 과정이다.
- 마찬가지로 수정순서는 urls → views → templates
- login(request, user, backend=None)
- 인증된 사용자를 로그인 시키는 로직으로 view 함수에 사용된다.
- get_user() : 유효성 검사를 통과했을 경우 로그인한 사용자 객체를 반환한다.
# accounts/urls.py from django.urls import path from . import views app_name = "accounts" urlpatterns = [ path('login/', views.login, name="login"), ]
# accounts/vies.py from django.shortcuts import render, redirect from django.contrib.auth import login as auth_login from django.contrib.auth.forms import AuthenticationForm # Create your views here. def login(request): # 회원가입을 DB에 저장하는 부분 if request=="POST": form = AuthenticationForm(request, request.POST) if form.is_valid(): auth_login(request, form.get_user()) return redirect("articles:index") # 단순히 정보를 READ 하는 부분 else: form = AuthenticationForm() context = { 'form' : form } return render(request, 'accounts/login.html', context)
# accounts/templates/accounts/login.html {% extends 'base.html' %} {% block content %} <h1>로그인</h1> <form action="{% url "accounts:login" %}"> {% csrf_token %} {{ form.as_p }} <input type="submit"> </form> {% endblock content %}
2. Logout
- 로그아웃은 Session을 Delete 하는 과정이다.
- logout(request)
- 현재 요청에 대한 session data를 DB에서 삭제
- 클라이언트의 쿠키에서도 session id를 삭제
# accounts/urls.py from django.urls import path from . import views app_name = "accounts" urlpatterns = [ path('login/', views.login, name="login"), # 이 부분을 추가하였다. path('logout/', views.logout, name="logout"), ]
# accouts/views.py from django.shortcuts import render, redirect from django.contrib.auth import login as auth_login # 이부분을 추가하였다 from django.contrib.auth import logout as auth_logout from django.contrib.auth.forms import AuthenticationForm # Create your views here. def login(request): # 회원가입을 DB에 저장하는 부분 if request=="POST": form = AuthenticationForm(request, request.POST) if form.is_valid(): auth_login(request, form.get_user()) return redirect("articles:index") # 단순히 정보를 READ 하는 부분 else: form = AuthenticationForm() context = { 'form' : form } return render(request, 'accounts/login.html', context) # 이 부분을 추가하였다. def logout(request): auth_logout(request) return redirect('articles:index')
# base.html <form action="{% url 'accounts:logout' %}" method="POST"> {% csrf_token %} <input type="submit" value="logout">
Uploaded by N2T