본문 바로가기

Web

Django-userena로 사용자 등록/로그인 구현 - 설정


userena 설치가 정상적으로 완료되었다면, 몇가지 셋팅만으로 사용자 등록, 로그인, 로그아웃등의 계정과 관계된 기능을 넣을 수 있게된다. 



설정 순서


(1) 생성한 프로젝트의 settings.py 파일에 django app들을 등록해야 한다. 이것은 userena를 설치하면 같이 설치가 될 것이다.
* 참고로 easy_thumbnails 앱이 정상적으로 동작하기 위해서는 PIL(Python Imaging Library) 라이브러리 설치가 필요하다고 한다. easy-thumbnails는 사용자 계정에 자신의 사진을 업로드하여 그 사진의 썸네일 이미지를 계정의 프로파일 이미지로 사용하기 위한것이다.


INSTALLED_APPS = (

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.sites',

    'django.contrib.messages',

    'django.contrib.staticfiles',

    'userena',

    'guardian',

    'easy_thumbnails', )



(2) setting.py내에 AUTHENTICATION_BACKENDS와 ANONYMOUS_USER_ID 를 추가해 준다.


 AUTHENTICATION_BACKENDS = (

    'userena.backends.UserenaAuthenticationBackend',

    'guardian.backends.ObjectPermissionBackend',

    'django.contrib.auth.backends.ModelBackend',

)

ANONYMOUS_USER_ID = -1



(3) 새로운 앱을 하나 생성한다. 앱 이름을 'accounts'라고 정한다면


python manage.py startapp accounts 



(4) 생성한 accounts 앱을 INSTALLED_APPS에 등록한다.


 

INSTALLED_APPS = (

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.sites',

    'django.contrib.messages',

    'django.contrib.staticfiles',

    'userena',

    'guardian',

    'easy_thumbnail',

    'accounts',)



(5) 아래 코드를 방금 생성한 accounts앱의 models.py에 추가한다.


 #-*- coding:utf-8 -*-

from django.db import models

from django.contrib.auth.models import User  

from django.utils.translation import ugettext as _  

from userena.models import UserenaBaseProfile  

  

class MyProfile(UserenaBaseProfile):  

    user = models.OneToOneField(User,unique=True,  

                        verbose_name=_('user'),related_name='my_profile')  



(6) 아래 코드를 settings.py에 추가한다.


AUTH_PROFILE_MODULE = 'accounts.MyProfile'  

LOGIN_REDIRECT_URL = '/accounts/%(username)s/'  

LOGIN_URL = '/accounts/signin/'  

LOGOUT_URL = '/accounts/signout/'


(7) 프로젝트의 urls.py 파일에 아래코드를 추가한다.


(r'^accounts/', include('userena.urls')), 



(8) activation 메일을 보내기위한 메일 서버 설정을 해야한다. gmail을 사용하는 경우라면 아래처럼 하면된다.


EMAIL_USE_TLS = True  

EMAIL_HOST = 'smtp.gmail.com'  

EMAIL_PORT = 587  

EMAIL_HOST_USER = 'your gmail ID@gmail.com'  

EMAIL_HOST_PASSWORD = 'your gmail password'


(9) 쉘에서 다음과 같이 입력한다.


 python manage.py check_permissions


(10) 이렇게 설정을 마치고, 서버를 실행후, http://localhost:8000/accounts/signup 으로 접속해보면 아래와 같이 뜬다.


python manage.py runserver 






참고


(1) 메일 보내기가 정상적으로 되는지 확인을 위해 django 쉘에서 다음처럼 해서 확인이 가능하다.(메일서버를 gmail로 설정한 경우) 메일이 전송완료되면 '1'이라고 뜬다.


python manage.py shell

...(python이 실행됨)

>> from  django.core.mail import send_mail

>> send_mail('mail title', 'mail contents', '발신메일@gmail.com', ['수신메일주소',])



(2) gmail의 SMTP서버를 설정했고, 테스트에서 메일이 전송되는 것을 확인했지만, django 프레임워크에서 사용자 등록후에 메일이 가지않고 오류를 낸다.