티스토리 뷰

  ● 로그인  

- 이번 프로젝트에서는 장고 내장 모듈 'django.contrib.auth'을 사용하여 로그인, 로그아웃을 구현한다.

- 해당 모듈을 사용하면 views.py , forms.py 등 관련 로직을 구현할 필요가 없다. 이미 인증 관련 URL 과 view 들이 미리 정의되어있기 때문이다.

- 대신 화면을 나타낼 templates와 경로 urls.py 에 대한 구현은 필요하다.

 

 

 

 

django_blog/settings.py

- 로그인, 로그아웃 이후에 어떤 화면으로 넘어가는지 정의한다. 일단은 홈화면으로 돌려놓는다.

LOGIN_REDIRECT_URL = '/'
LOGOUT_REDIRECT_URL = '/'

 

 

 

 

django_blog/urls.py

- URL 경로에서 'accounts/ ' 를 입력하면, django.contrib.auth.urls 에서 정의한 경로로 이동한다.

from django.urls import path, include

urlpatterns = [
    path('accounts/', include('django.contrib.auth.urls')),
]

 

- 장고에서 지원하는 인증 기능들은 아래와 같다. 로그인을 하고싶으면 http://127.0.0.1:8000/accounts/login 으로 이동하면 된다. 

^login/$ [name='login']
^logout/$ [name='logout']
^password_change/$ [name='password_change']
^password_change/done/$ [name='password_change_done']
^password_reset/$ [name='password_reset']
^password_reset/done/$ [name='password_reset_done']
^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$ [name='password_reset_confirm']
^reset/done/$ [name='password_reset_complete']

 

 

 

 

templates/registration/login.html

- 그러면 어떻게 html과 연결될 수 있을까? 바로 'templates/registration' 경로로 이동해서 'login.html' 파일로 자동으로 연결된다.

 

-'TemplateDoesNotExist at /accounts/login/' 에러가 발생했다면, 바로 templates/registration 경로 아래에 'login.html' 파일을 저장해야한다.  이 설정 값을 바꾸는 방법도 나중에 알아봐야겠다. 

{% extends 'base_.html' %}
{% block title %} 로그인 {% endblock %}
{% block page %}login{% endblock %}
{% block content %}
<div style = "padding-left:50px; padding-top:50px;">
    <h1>Login</h1>
    <hr>
    <form method = "post" action = "{% url 'login' %}">
        {%csrf_token%}
        <input type = "hidden" name = "next" value = "">
        {{form.as_p}}
        <button class = "btn btn-primary" type = "submit">로그인</button>
    </form>
</div>
{% endblock %}

 

 

 

 

실행 결과

- 해당 URL로 넘어가면 놀랍게도 로그인 기능이 실행된다. 

 

 

 

 

 

  ● 로그아웃  

 

- 로그아웃은 그 어떤 템플릿도 필요 없기 때문에 따로 설정하지 않아도 된다. 그러니 그냥 잘 작동되는지만 확인한다.

- sessionid가 저장되고 삭제되는 것을 보면서 로그인 로그아웃을 확인한다.

 

 

 

 

- 로그인 했을 때에는 다음과 같이 sessionid가 저장된다.

 

 

 

- 로그아웃 하고 난 이후에는, sessionid가 삭제됐다. Page not found 가 뜬 이유는 settings.py LOGOUT_REDIRECT_URL에서 정의한 '/' 홈화면을 아직 정의하지 않았기 때문이다.

 

댓글