๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŒŒ | WEB DEV/Django

Django_์žฅ๊ณ  ๋ถ€์ˆ˜๊ธฐ (7)_login, logout

by KASSID 2022. 6. 30.

๋ชฉ์ฐจ

    728x90

    ๋กœ๊ทธ์ธ/์•„์›ƒ ๊ตฌํ˜„

    1. urls.py

    ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ข…์†๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ฏ€๋กœ ํ”„๋กœ์ ํŠธ์˜ urls.py์— ํŒจํ„ด์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

    from django.contrib import admin
    from django.urls import include, path
    from django.contrib.auth import views
    
    urlpatterns = [
        path(r'^admin/', admin.site.urls),
        path(r'^accounts/login/$', views.LoginView.as_view(template_name="registration/login.html"), name='login'),
        path(r'^accounts/logout/$', views.LogoutView.as_view(template_name="registration/logout.html"), name='logout', kwargs={'next_page': '/'}),
        path(r'', include('blog.urls')),
    ]

    ์šฐ์—ฌ ๊ณก์ ˆ ๋์— stackoverflow์—์„œ ๋‹ต์„ ์ฐพ์•˜๋‹ค.

    (https://stackoverflow.com/questions/47065438/attributeerror-module-django-contrib-auth-views-has-no-attribute)

    from django.contrib.auth import views
    path(r'^accounts/login/$', views.LoginView.as_view(template_name="registration/login.html"), name='login'),
    path(r'^accounts/logout/$', views.LogoutView.as_view(template_name="registration/logout.html"), name='logout', kwargs={'next_page': '/'}),

    login/out์˜ ๋ทฐ ํ•จ์ˆ˜๋ฅผ ์œ„์™€ ๊ฐ™์ด ์ ‘๊ทผํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค.

     

    2. views.py

    - ๋‚ด์žฅ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ๋‹ค.

    - ๊ธฐ์กด์— ์žˆ๋˜ ํ•จ์ˆ˜๋“ค์— ๋กœ๊ทธ์ธ ๊ถŒํ•œ์ด ์žˆ์„ ๊ฒฝ์šฐ์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก

      decorator๋ฅผ ์ด์šฉํ•ด ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ๋‹ค.

    from django.contrib.auth.decorators import login_required
    
    @login_required
    def ...

     

    3. template

    template ํด๋”์— registration์ด๋ผ๋Š” ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๊ณ 

    ๊ทธ ์œ„์น˜์— ์ƒˆ๋กœ์šด ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์ฃผ์—ˆ๋‹ค.

    login

    {% block content %}
        {% if form.errors %}
            <p>์ด๋ฆ„๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ์‹œ๋„ํ•ด์ฃผ์„ธ์š”.</p>
        {% endif %}
    
        <form class="login-container" method="post" action="{% url 'login' %}">
        {% csrf_token %}
            <table>
            <tr>
                <td>{{ form.username.label_tag }}</td>
                <td>{{ form.username }}</td>
            </tr>
            <tr>
                <td>{{ form.password.label_tag }}</td>
                <td>{{ form.password }}</td>
            </tr>
            </table>
    
            <label class="login-btn-container">
                <input class="login-btn" type="submit" value="Login" />
                <i class="fas fa-sign-in-alt"></i>
            </label>
            <input type="hidden" name="next" value="{{ next }}" />
        </form>
    {% endblock %}

    logout

    - ํ…œํ”Œ๋ฆฟ์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค.

     

    ๋Œ“๊ธ€