[pinterest clone (14)] Login / Logout 구현
웹 프로그래밍

[pinterest clone (14)] Login / Logout 구현

728x90
반응형

장고에 Login view, Logout view 제공된다.

 

 

1

urls.py

from django.contrib.auth.views import LoginView, LogoutView
from django.urls import path

from accountapp.views import hello_world, AccountCreateView

app_name = 'accountapp'

urlpatterns = [
    path('hello_world/', hello_world, name='hello_world'),

    path('login/', LoginView.as_view(template_name='accountapp/login.html'), name='login'),
    path('logout/', LogoutView.as_view(), name='logout'),

    path('create/', AccountCreateView.as_view(), name='create'),
]

 

2

accountapp/login.html 만들기

{% extends 'base.html' %}

{% block content %}

    <div style="text-align: center;">
        <div>
            <h4>Login</h4>
        </div>
        <div>
            <form action="" method="post">
                {% csrf_token %}
                {{ form }}
                <input type="submit" class="btn btn-primary">
            </form>
        </div>
    </div>

{% endblock %}

 

화면 잘 출력된다.

 

3

duckracoon.tistory.com/45

 

[pinterest clone (13)] CreateView를 통한 회원가입 구현

duckracoon.tistory.com/44?category=1017083 Django가 CRUD로 유명한 이유 CRUD는 Create, Read, Update, Delete가 가능한 시스템을 이야기한다. 그리고 Django는 CRUD를 만드는데 있어 생산성이 탁월한 것으로..

duckracoon.tistory.com

회원가입 하고 로그인해서 테스트해보자

로그인하면 http://127.0.0.1:8000/accounts/profile/ 로 연결이 된다. (만든적없으니 에러난다.)

* Redirect Mechanism

먼저 next라는 이름을 가진 value를 찾는다. 존재한다면 거기로가는데 없으면 settings.py안에 LOGIN_REDIRECT_URL로 간다. 그것도 없으면 최종적으로 Default로 간다. http://127.0.0.1:8000/accounts/profile/ 이 경우에 디폴트로 찾아간것이다. 이제 이걸 방지해보자.

 

4

<div class="platypus_header">
    <div>
       <h1 class="platypus_logo">Platypus</h1>
    </div>
    <div>
        <span>nav1</span>
        <span>nav2</span>
        <span>nav3</span>
        {% if not user.is_authenticated %}
        <a href="{% url 'accountapp:login' %}?next={{ request.path }}">
            <span>login</span>
        </a>
        {% else %}
        <a href="{% url 'accountapp:logout' %}?next={{ request.path }}">
            <span>logout</span>
        </a>
        {% endif %}

    </div>
</div>

분기문으로 로그인 안되어있으면 login 버튼 주고 로그인상태면 logout 버튼을 준다.

{% url 'accountapp:login' %} url을 이렇게 줬는데 로그인을 마친후 다시가야할 경로를 GET형식으로 ?를 붙여 넘겨주자.

next라는 인자를 넘겨줌으로써 로그인을 마치고 원래있었던 페이지로 돌아온다.

 

버튼 눌러 접속시: http://127.0.0.1:8000/account/login/?next=/account/hello_world/

로그인 직접입력시: http://127.0.0.1:8000/account/login/

 

5

만약 next 안거치고 http://127.0.0.1:8000/accounts/login/ 직접 입력해서 로그인 접근하면 여전히 디폴트로 넘어온다.

이걸 방지하기위해 이제 LOGIN_REDIRECT_URL를 설정한다.

 

settings.py

LOGIN_REDIRECT_URL = reverse_lazy('accountapp:hello_world')
LOGOUT_REDIRECT_URL = reverse_lazy('accountapp:login')

 

728x90
반응형