Webpage

5. Django Login / Logout

고다치즈바게트 2019. 9. 10. 13:36

- 0. 참고 사이트

 

숙제: 안전한 웹사이트 만들기 · Django Girls Tutorial: Extensions

관리자 화면을 사용하는 경우를 제외하고는 미리 설정한 비밀번호를 그동안 사용하지 않았어요. 그래서 내 블로그에 누구든지 마음대로 글을 작성하거나 수정할 수 있다는 것을 눈치챘을 거예요. '네가 누군지 모르겠지만, 내 블로그에 글 쓰는 것을 원치 않아!'라는 생각이 들 거예요. 그래서 아무나 들어와서 글을 쓰지 못하도록 뭔가 만들 수 있답니다. 첫 번째로 보안을 위해 무언가를 할 거예요. 우리는 로그인 한 사용자만 글에 접근할 수 있도록 post_new,

tutorial-extensions.djangogirls.org

현재위치 : ~/mysite$

- 1.로그인하기

1) urls 연결

vi mysite/urls.py

from django.contrib import admin
from django.urls import path, include
from django.conf.urls import url
from django.contrib.auth import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blog.urls')),
    url(r'^accounts/login/$', views.login, name='login'),
]

mysite폴더 안의 mysite/urls.py 를 이용한다.

참고한 사이트랑 뭔가 좀 다르게 생겼으나 일단 

from django.conf.urls import url
from django.contrib.auth import views

urlpatterns = [
    url(r'^accounts/login/$', views.login, name='login'),
]

이부분을 추가해준다.

2) login.html생성

blog/template/registration 폴더와 login.html 파일 생성

{% extends "blog/base.html" %}

{% block content %}
    {% if form.errors %}
        <p>ID or PW INCORRECT. Please try again.</p>
    {% endif %}

    <form 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>

        <input type="submit" value="login" />
        <input type="hidden" name="next" value="{{ next }}" />
    </form>
{% endblock %}

위 내용을 붙여넣기한다.

3) setting.py 수정

vi mysite/setting.py

LOGIN_REDIRECT_URL = '/'

mysite/setting.py 맨 끝에 이 내용 붙여넣기.

4) 로그인 버튼 보이게 하기

vi blog/template/blog/base.html

<body>
    <div class="page-header">
        {% if user.is_authenticated %}
            <p class="top-menu"> Hello {{ user.username }} </p>
        {% else %}
            <a href="{% url 'login' %}" class="top-menu"><span class="glyphicon glyphicon-lock"></span></a>
        {% endif %}
        <h1><a href="/">Django Girls Blog</a></h1>
    </div>
    <div class="content container">
        <div class="row">
            <div class="col-md-8">
            {% block content %}
            {% endblock %}
            </div>
        </div>
    </div>
</body>

base.html의 body부분에

로그인이 되어있으면 Hello (username), 안되어있으면 login버튼을 보이게 출력.

실행하면 login.html은 

이렇게 잘 뜨고

로그인하면 우측 상단에

다음과 같이 id와함께 띄워준다.

- 2. 로그아웃하기.

1) 로그아웃 버튼 보이게 하기

vi blog/template/blog/base.html

<body>
    <div class="page-header">
        {% if user.is_authenticated %}
            <p class="top-menu"> Hello {{ user.username }} <small> (<a href="{% url 'logout' %}">Log out</a>)</small></p>
        {% else %}
            <a href="{% url 'login' %}" class="top-menu"><span class="glyphicon glyphicon-lock"></span></a>
        {% endif %}
        <h1><a href="/">Django Girls Blog</a></h1>
    </div>
    <div class="content container">
        <div class="row">
            <div class="col-md-8">
            {% block content %}
            {% endblock %}
            </div>
        </div>
    </div>
</body>

Hello (username) 옆에 작게 logout을 만들것임.

2) url 연결

vi mysite/urls.py

urlpatterns=[
	url(r'^accounts/logout/$', views.logout, name='logout', kwargs={'next_page': '/'}),
]

추가

kwargs가 뭔지는 모르겠는데...일단 정상작동은 되는것 같다.

 

댓글수0