IT 개발/Django

[Django] 장고, 로그인 / 로그아웃 구현하기 (쉬운방법)

KADOSHOLY 2023. 12. 31. 23:58
반응형

 

Django - 장고, 로그인 / 로그아웃 구현하기 (쉬운방법)

 

 

   목차

  1. 로그인 / 로그아웃 구현하기
    1. config > urls.py
    2. testapp > urls.py
    3. templates > testapp > login.html
    4. templates > form_errors.html
    5. config > settings.py
    6. 실행결과

 

 

1. 로그인 / 로그아웃 구현하기

 

웹 사이트를 만들다 보면 기본적으로 로그인과 로그아웃 기능을 필요로 하는 경우가 많이 있습니다. 장고에서는 기본적으로 설치되어 있는 앱 중 django.contrib.auth를 사용하면 로그인과 로그아웃 기능을 쉽게 구현할 수 있습니다. 

 

 

1) config > urls.py

urlpatterns = [
    path("testapp/", include('testapp.urls')),
]

 

2) testapp > urls.py

from django.contrib.auth import views as auth_views

app_name = 'testapp'
urlpatterns = [
    path("login/", 
         auth_views.LoginView.as_view(template_name='testapp/login.html'), 
         name="login"),

    path("logout/",
         auth_views.LogoutView.as_view(),
         name="logout"),
]

 

3) templates > testapp > login.html

 

로그인 화면을 구현합니다. 로그인이 되었다면 로그인 정보와 함께 로그아웃할 수 있는 기능을 화면에 보여주고, 로그인이 되어 있지 않다면 로그인을 할 수 있는 입력창을 화면에 나타냅니다. 

  • "username"과 "password"는 로그인 구현시 django.contrib.auth에서 요구하는 항목입니다
<!DOCTYPE html>
<html lang="en">
<head>...</head>
<body>
    {% if user.is_authenticated %}
    <div>{{ user.username }} 님 반갑습니다.</div>
    <div>
        <a href="{% url 'testapp:logout' %}">
            {{ user.username }} 님 반갑습니다. (로그아웃)
        </a>
    </div>
    
    {% else %}
    <div>현재 상태 : Guest</div>
    <div>
        <form method="post" action="{% url 'testapp:login' %}">
            {% csrf_token %}
            {% include "form_errors.html" %}
            <div>
                <label for="username">사용자ID</label>
                <input type="text" name="username" id="username"
                    value="{{ form.username.value | default_if_none:'' }}">
            </div>
            <div>
                <label for="password">비밀번호</label>
                <input type="password" name="password" id="password"
                    value="{{ form.password.value | default_if_none:'' }}">
            </div>
            <button type="submit">로그인</button>
        </form>
    </div>
    {% endif %}
</body>
</html>

 

4) templates > form_errors.html

 

로그인 화면에서 입력 폼에 정상적인 로그인 정보가 들어오지 않으면 에러 메세지를 나타냅니다.

{% if form.errors %}
    {% for field in form %}
        {% for error in field.errors %}
            <div>
                <strong>{{ field.label }}</strong>
                {{ error }}
            </div>
        {% endfor %}
    {% endfor %}
    {% for error in form.non_field_errors %}
        <div>
            <strong>{{ error }}</strong>
        </div>
    {% endfor %}
{% endif %}

 

5) config > setting.py

 

로그인 또는 로그아웃 후 이동할 url을 지정해 줍니다. 

LOGIN_REDIRECT_URL = "/testapp/login/"
LOGOUT_REDIRECT_URL = "/testapp/login/"

 

[실행결과]

  • 아이디와 비밀번호는 따로 추가하지 않았다면, 관리자기능을 활성화 할 때 만들었던 superuser (보통 admin 계정) 으로 로그인하시면 되며, DB의 auth_user 테이블에서 확인하실수 있습니다.  

로그인 대기 화면
로그인 대기 화면
로그인 에러 화면
로그인 에러 화면
로그인 완료 화면
로그인 완료 화면

 

 

반응형