티스토리 뷰

파이참을 실행해서 장고 프로젝트 실행한다.


먼저 bookmarks라는 이름으로  프로젝트를 하나 만들도록 하자



소셜웹사이트용 어플리케이션 account를 만든다.


django-admin startapp account


python manage.py migrate



이제 어플리케이션이 생성되었다.


소셜 웹사이트라면 역시 로그인/로그아웃 과 글쓰기 가 있어야한다. 이를 사용하려면 세션을 사용해야하는데, 로그인을 하는 순간 세션을 시작하고 세션이 있는 사용자만 글쓰기가 가능하면서, 로그아웃을 하는 순간 세션을 해제 해야한다. 웹에서 세션관리하는게 조금 까다로운데, 장고는 프레임워크로 한번에 관리를 해준다. 장고의 setting.py파일을 보면 Middleware(Middle_classes) 안에  AuthenticationMiddleware와 SesstionMiddleware가 프로젝트 생성시부터 들어있는데 이 두 개의 프레임워크가 세션과 유저인증을 동시에 관리 할 수 있게 해준다.


Authenfication framework 속에는 기능을 바로 사용할 수 있도록 몇가지 데이터 모델들이 탑재되어 있는데, 확인 해보고 넘어가보자

  • User : 기본유저 모델 username, password, email, first_name, last_name, is_active  6가지 필드로 구성되어있다.
  • Group : 유저를 카테고리로 묶기위한 모델
  • Permission : 어드민 등의 권한계정을 확인하기 위한 모델


사용하기 위한 프레임워크의 설치가 완료되었으니 이제 시작해보자

먼저 첫 로그인 화면부터 만들어 보자


로그인 뷰는 단순하게 아이디와 패스워드를 입력 로그인 버튼으로 구성한다.



forms.py

from django import forms


class LoginForm(forms.Form):
username = forms.CharField()
password = forms.CharField(widget=forms.PasswordInput)


views.py

from django.shortcuts import render
from django.http import HttpResponse
from django.shortcuts import render
from django.contrib.auth import authenticate, login
from .forms import LoginForm


# Create your views here.


def user_login(request):
form = LoginForm()
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
user = authenticate(username=cd['username'],
password=cd['password'])
if user is not None:
if user.is_active:
login(request, user)
return HttpResponse('Authenticated', 'successfully')
else:
return HttpResponse('Disabled account')

else:
return HttpResponse('Invalid login')
else:
form = LoginForm()
return render(request, 'account/login.html', {
'form': form
})



account/urls.py (account 웹어플리케이션의 urls)

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


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


urls.py(프로젝트 urls)

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^account/', include('account.urls')),
]



파이썬 파일들은 여기까지 수정하고, HTML파일을 건드려보자


base.html

{% load staticfiles %}
<!DOCTYPE html>
<html lang="en">
<head>
<title>{% block title %}
{% endblock %}</title>
<link href="{% static "css/base.css" %}" rel="stylesheet">
</head>
<body>
<div id="header">
<span class="logo">Bookmarks</span>
</div>
<div id="content">
{% block content %}
{% endblock %}
</div>
</body>
</html>


account/login.html

{% extends "base.html" %}

{% block title %}Log-in{% endblock %}

{% block content %}
<h1>Log-in</h1>
<p>Please, use the following form to log-in</p>
<form action="." method="post">
{{ form.as_p }}
{% csrf_token %}
<p><input type="submit" value="Log-in"></p>
</form>
{% endblock %}



css파일까지 올리기엔 양이 너무 많아서 생략한다.





이제 로그인이 되는지 시험해봐야한다. 그런데 로그인을 사용하기 위해서 사용할 임의의 아이디가 아직 없다 그래서 관리자부터 만들어서 사용해보자

슈퍼유저를 생성을 하고난 뒤에



http://127.0.0.1:8000/admin 으로 접속을 하면 관리자로 로그인이 가능하다

유저테이블에 Add 하여 테스트용 계정을 하나 만들자



이제 로그인을 위해서 http://127.0.0.1:8000/account/login 으로 접속해보자 




최초 화면은 Username, Password를 입력하고 로그인을 할 수 있게 만든 모양이 나오고 방금전 만든 테스트 계정으로 로그인을 하면


실패했을 경우


성공했을 경우


이렇게 두가지로 결과가 출력될 것이다.






이제 로그인 하기는 끝났다.



장고의 authentication을 이용하면 로그인이 이렇게 간편하게 구현이 가능하다. 그리고 제공하는 기능이 몇가지 더있는데 정리를 해보았다.

  • login : 로그인

  • logout : 로그아웃

  • logout_then_login : 로그아웃 후 로그인화면으로 리다이렉트

  • password_change : 비밀번호 바꾸기

  • password_change_done : 비밀번호 바꾸기가 성공하면 성공메시지를 보여주는 화면으로 이동

  • password_reset : 이메일로 패스워드 초기화 링크를 보내준다.

  • password_reset_done : 유저의 이메일로 비밀번호 초기화 링크를 보내줬다고 메시지를 보여주는 화면으로 이동

  • password_reset_confirm : 유저가 비밀번호 초기화 링크를 타고 들어와서 새로운 비밀번호를 입력

  • password_reset_complete : 초기화링크로 새롭게 바뀐 비밀번호가 성공적으로 바꼈다고 알려주는 기능(외국사이트에서 많이 본듯 하다)

뭐 암튼 이렇다 이런 기능들을 잘 쓰면 될것 같다. 



너무 길어질 느낌이 보여서 로그아웃 기능은 다음 포스팅에 쓸 예정이다.