상세 컨텐츠

본문 제목

login/logout 구현

django

by 개복신 개발자 2021. 8. 11. 22:01

본문

728x90
반응형

urls.py-->경로 설정

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

-django에서 기본 제공하는 LoginView와 LogoutView를 가져와서 사용한다. 그래서 urls.py에 기입한다.

따라서 view.py를 따로 작성할 필요는 없다!

 

-LoginView.as_view(template_name="accountapp/login.html")

괄호에 template_name을 적고 경로를 작성한다. html과 연동하기 위한 작업이다

 

-class based view에서는 url상에서 .as_view()를 붙여야 한다!


-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 %}

-{{form}}을 통해 기본 제공되는 형식을 html에 넣는다

-form의 action에 아무것도 기입하지 않았는데 로그인이 작동한다. 아마LoginView.as_view(template_name="accountapp/login.html"코드 때문에 자동으로 적용되어서 그러한 거 같다


header.html(머리 부분 base)

-->상단 바의 목록 칸 div 안에 작성한 코드

        {% 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 %}

 

-if문과 else문을 작성하여 로그인에 성공하여 사용자가 인증되었을 때와 로그인을 하지 않아 인증이 안되었을 경우 각각 목록에 다른 것이 보이도록 html에 코드를 작성하였다.

 

-?next={{ request.path }}

이 코드는 로그인이나 로그아웃이 성공할 시 이전 페이지로 이동하는 기능을 갖는 코드이다.

next를 인자로 받아서 다음에 이동할 path를 미리 저장하고 성공하면 그 경로로 이동하는 것이다.

그 경로가 이전 페이지이다.


pinterest 앱 안의 settings.py에 redirect url 설정하기

pinterest/settings.py

-reverse_lazy

reverse와 reverse_lazy는 일일이 url을 외워서 기입하는 하드 코딩을 대신해주는 기능이 있다

즉 경로만 작성하면 알아서 url까지 처리해주는 것이다. 따라서 url이 바뀌어도 코드를 따로 수정할 필요 없다

 

-redirect url을 설정해두면 로그인이나 로그아웃 성공시 이동할 지점이 일관적이다

 

반응형

관련글 더보기

댓글 영역