티스토리 뷰

Django

[Django] 15. Authentication in Web requests

개발자 뭄뭄 2022. 10. 5. 22:01
반응형

로그인, 로그아웃, 회원가입 … 등등도 결국 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

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
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
글 보관함