5. Django Login / Logout
- 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가 뭔지는 모르겠는데...일단 정상작동은 되는것 같다.
