views.py 에서 세션을 참조하려면, 아래와 같이 사용하지만, Template 에서는 같은 문법을 사용할 수 없다.

request.session['세션이름'] = '값'

Template에서 Session을 이용하는 방법을 알아보자. settings.py 에 다음을 추가한다.

TEMPLATE_CONTEXT_PROCESSORS = (     'django.core.context_processors.request', )


views.py 에서는 render 함수를 이용해서 리턴한다.

return render(request, 'session_test.html')


Template에서는 아래와 같이 사용한다.

{{ request.session.세션이름 }}

 

Django 의 내장 authentication 모듈을 사용하지 않는 경우, 직접 제작을 해야 하는데, login_required 라는 데코레이터가 없어서, 매번 View 에서 접근 로직을 작성해주어야 해서 번거로웠다. 아래와 같이 별도의 데코레이터를 작성해두면 로직이 바뀌더라도 하나만 변경하면 되니까 코드 관리가 좀 더 편할 것이다.

def login_required(function=None):
  def _dec(view_func):
    def _view(request, *args, **kwargs):
    # 아래 로직을 적당히 자신의 사이트에 맞게 고쳐서 쓰면 될 것이다.
      if "login_yn" not in request.session:
        return HttpResponseRedirect('/')
      else:
        return view_func(request, *args, **kwargs)
    _view.__name__ = view_func.__name__
    _view.__dict__ = view_func.__dict__
    _view.__doc__ = view_func.__doc__
    return _view
  if function is None:
    return _dec
  else:
    return _dec(function)

'쉽고 빠른 웹개발 Django'은 1.0버전 기준이어서 최신버전 (1.4.3)에서 막히면 진도를 더이상 나갈 수 없게 됩니다. 이에, 최신 버전에서도 진행할 수 있도록 변경된 부분을 반영하여 수정본을 작성해보았습니다. 1.4 이후 부터 디렉토리 구조가 조금 변경이 되었는데, 대부분 이 것 때문에 기존버전과 맞지 않는 부분이 생기는 것입니다. 추후 더 변경할 것이 발견되면 추가하도록 하겠습니다. 


P. 15 
Before
django_bookmarks/
    __init__.py
    manage.py
    settings.py
    urls.py
After
django_bookmarks/
    manage.py
    django_bookmarks/
        __init__.py
        settings.py
        urls.py
        wsgi.py

P. 17 
Before
DATABASE_ENGINE = 'sqlite3'
DATABASE_NAME = 'bookmarksdb'
DATABASE_USER = ''
DATABASE_PASSWORD = ''
DATABASE_HOST = ''
DATABASE_PORT = ''
After
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'bookmarksdb',                  # Or path to database file if using sqlite3.
        'USER': '',                      # Not used with sqlite3.
        'PASSWORD': '',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}

P.30 
Before
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django_bookmarks.bookmarks',
)
After
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'bookmarks',
)

P. 37 
Before
import os.path

TEMPLATE_DIRS = (
    os.path.join(os.path.dirname(__file__), 'templates'),
)
After
import os
SETTINGS_DIR = os.path.abspath(os.path.dirname(__file__))
(SITE_ROOT, dummy) = os.path.split(SETTINGS_DIR)

TEMPLATE_DIRS = (
    os.path.join(SITE_ROOT, 'templates'),
)

P. 48 
Before
...
...
After
...
{% csrf_token %}
...

P. 55 
Before
import os.path

site_media = os.path.join(
    os.path.dirname(__file__), 'site_media'
)
After
import os

URLS_DIR = os.path.abspath(os.path.dirname(__file__))
(SITE_ROOT, dummy) = os.path.split(URLS_DIR)
site_media = os.path.join(SITE_ROOT, 'site_media')

P. 58 
Before
from django import newforms as forms
After
# -*- coding: utf-8 -*-
from django import forms


Django 1.4 에서 가장 큰 변화라면, 전체 어플리케이션의 레이아웃이 바뀌었다는 점이다.

이전 버전에서는 프로젝트를 생성하면 아래와 같이 파일들이 생성되었다.

project_name/
            `- __init__.py
            `- manage.py
            `- settings.py
            `- urls.py
            `- wsgi.py

1.4에서는 이렇게 바뀌었다.

project_name/
            `- manage.py
            `- project_name/
                           `- __init__.py
                           `- settings.py
                           `- urls.py
                           `- wsgi.py

여기에서 주의 깊게 볼 것은 상위에 있는 project_name 디렉토리에는 __init__.py 파일이 없기 때문에 패키지명으로 사용할 수 없다는 것과 settings.py 에서 템플릿 디렉토리를 지정할 때 주의해야 한다는 것이다. 템플릿 디렉토리를 절대경로로 하는 경우에는 상관 없지만, 보통(?) settings.py 를 기준으로 상대경로를 지정하는 경우가 많이 있다.

1.4 이전에는 다음과 같이 하면 문제 없었다.

import os.path
TEMPLATE_DIRS = (
    os.path.join(os.path.dirname(__file__), 'templates'),
)

그러나, 1.4 에서는 settings.py 의 위치가 한단계 밑으로 내려갔기 때문에, 좀 더 복잡해지긴 했지만, 아래와 같은 방법으로 설정해주어야 한다.

import os

SETTINGS_DIR = os.path.abspath(os.path.dirname(__file__))
(SITE_ROOT, dummy) = os.path.split(SETTINGS_DIR)


TEMPLATE_DIRS = (
    os.path.join(SITE_ROOT, 'templates'),
)



+ Recent posts