Django 버전 0.96 릴리스 정보¶
Django 0.96에 오신 것을 환영합니다!
0.96의 주요 목표는 0.95에 도입된 기능을 정리하고 안정화하는 것입니다. 0.95 이후 몇 가지 작은 ‘역호환되지 않는 변경들’_이 있었지만, 업그레이드 프로세스는 상당히 단순해야 하며 기존 애플리케이션에 큰 변경이 필요하지 않아야 합니다.
그러나 지금 0.96를 릴리스 하는 이유는 가까운 장래에 이전 버전과 호환되지 않는 일련의 변경이 예정되어 있기 때문입니다. 이 변경에는 애플리케이션 개발자를 위한 일부 코드 변경이 포함되므로, 다음 공식 릴리스까지 Django 0.96을 사용하는 것을 권장합니다. 그러면 Django의 개발 버전을 따라잡기 위해 점진적인 변경을 수행할 필요 없이 한 번에 업그레이드할 수 있습니다.
이전 버전과 호환되지 않는 변경¶
다음 변경 사항으로 인해 0.95에서 0.96으로 전환할 때 코드를 업데이트해야 할 수 있습니다.
MySQLdb
버전 요구 사항¶
이전 버전의 MySQLdb
Python 모듈(Django가 MySQL 데이터베이스에 연결하는 데 사용함)의 버그로 인해 Django의 MySQL 백엔드는 이제 MySQLdb
버전 1.2.1p2 이상이 필요하며, 이전 버전을 사용하려고 하면 예외가 발생합니다.
현재 이 요구 사항을 충족하기 위해 MySQLdb
사본을 업그레이드할 수 없는 경우, “mysql_old”라는 별도의 이전 버전과 호환되는 백엔드가 Django에 추가되었습니다. 이 백엔드를 사용하려면 다음에서 Django 설정 파일의 DATABASE_ENGINE
설정을 변경하십시오:
DATABASE_ENGINE = "mysql"
이에:
DATABASE_ENGINE = "mysql_old"
그러나 우리는 MySQL 사용자가 가능한 한 빨리 ``MySQLdb``의 최신 버전으로 업그레이드할 것을 강력히 권장합니다. “mysql_old” 백엔드는 이러한 전환을 용이하게 하기 위해서만 제공되며, 이후에는 더 이상 사용되지 않는 것으로 간주됩니다. 필요한 보안 수정 사항을 제외하고는 적극적으로 유지 관리되지 않으며, Django의 향후 릴리스에서 제거될 예정입니다.
또한 새로운 DATABASE_OPTIONS
설정(자세한 내용은 데이터베이스 문서 참조)과 같은 일부 기능은 “mysql” 백엔드에서만 사용할 수 있으며, “mysql_old”에서는 사용할 수 없습니다. .
데이터베이스 제약 조건 이름 변경¶
Django가 외래 키 참조를 위해 생성하는 제약 조건 이름의 형식이 약간 변경되었습니다. 이러한 이름은 일반적으로 영향을 받는 열에 참조를 직접 배치할 수 없는 경우에만 사용되므로, 항상 표시되는 것은 아닙니다.
이 변경의 효과는 기존 데이터베이스에 대해 manage.py reset
및 유사한 명령을 실행하면 새로운 형식의 제약 조건 이름으로 SQL을 생성할 수 있지만, 데이터베이스 자체에는 이전 형식으로 명명된 제약 조건이 포함된다는 것입니다. 이로 인해 데이터베이스 서버는 존재하지 않는 제약 조건 수정에 대한 오류 메시지를 발생시킵니다.
이 문제를 해결해야 하는 경우, 다음 두 가지 방법을 사용할 수 있습니다:
``manage.py``의 이름 변경¶
``manage.py``에 대한 몇 가지 옵션이 픽스처 지원 추가로 변경되었습니다.
- 새로운
dumpdata
및loaddata
명령이 있으며, 이는 예상할 수 있듯이 데이터베이스로/에서 데이터를 덤프하고 로드합니다. 이러한 명령은 Django에서 지원하는 모든 직렬화 형식에 대해 작동할 수 있습니다. loaddata``가 데이터 (및 다른 사용자 지정 SQL (뷰, 저장 프로시저 등)을 위한 ``sqlcustom
)에 사용되어야 함을 강조하기 위해sqlinitialdata
명령이 ``sqlcustom``으로 이름이 변경되었습니다.- 사용되지 않는
install
명령이 제거되었습니다. ``syncdb``를 사용하십시오.
백슬래시 이스케이프 변경¶
Django 데이터베이스 API는 이제 쿼리 매개변수로 제공된 백슬래시를 이스케이프 처리합니다. 백슬래시와 일치하는 데이터베이스 API 코드가 있고, (이스케이프가 없음에도 불구하고) 이전에 작동하고 있었다면, 슬래시를 한 단계 “이스케이프 해제”하도록 코드를 변경해야 합니다.
예를 들어, 이는 다음과 같이 작동했습니다:
# Find text containing a single backslash
MyModel.objects.filter(text__contains="\\\\")
위의 내용은 이제 올바르지 않으며, 다음과 같이 다시 작성해야 합니다:
# Find text containing a single backslash
MyModel.objects.filter(text__contains="\\")
0.96의 새로운 기능은 무엇입니까?¶
이 개정판은 1000개 이상의 소스 커밋과 400개 이상의 버그 수정을 나타내므로, 모든 변경 사항을 카탈로그화할 수는 없습니다. 여기에서는 이 릴리스에서 가장 눈에 띄는 변경 사항을 설명합니다.
새 양식 라이브러리¶
``django.newforms``는 Django의 새로운 폼 처리 라이브러리입니다. 이전 양식/조작자/검증 프레임워크인 ``django.forms``를 대체합니다. 두 API 모두 0.96에서 사용할 수 있지만 다음 두 릴리스에서 새로운 양식 시스템으로 완전히 전환하고, 이전 시스템을 더 이상 사용하지 않고 제거할 계획입니다.
이 전환에는 세 가지 요소가 있습니다:
현재 ``django.forms``를 ``django.oldforms``에 복사했습니다. 이렇게 하면 이전 버전과 호환되지 않는 변경을 기다리거나 사후에 코드를 수정하기 위해 서두르지 않고 지금 코드를 업그레이드할 수 있습니다. import 문을 다음과 같이 변경하십시오:
from django import forms # 0.95-style from django import oldforms as forms # 0.96-style
Django의 다음 공식 릴리스는 현재 ``django.newforms``를 ``django.forms``로 옮길 것입니다. 이는 이전 버전과 호환되지 않는 변경 사항이며 당시 ``django.forms``의 이전 버전을 사용하는 사람은 위에서 설명한 대로 import 문을 변경해야 합니다.
그 다음 릴리스에서는 ``django.oldforms``가 완전히 제거됩니다.
newforms
라이브러리는 계속 발전하겠지만, 대부분의 일반적인 경우에는 사용할 준비가 되어 있습니다. 양식 처리를 처음 접하는 사람은 이전 양식 시스템을 건너뛰고 새 양식으로 시작하는 것이 좋습니다.
``django.newforms``에 대한 자세한 내용은 :doc:`newforms 문서 </topics/forms/index>`를 참조하세요.
URLconf 개선¶
이제 URLconf에서 콜백으로 모든 콜러블을 사용할 수 있습니다(이전에는 콜러블을 참조하는 문자열만 허용됨). 이를 통해 URLconf를 훨씬 더 자연스럽게 사용할 수 있습니다. 예를 들어, 이 URLconf:
from django.conf.urls.defaults import *
urlpatterns = patterns("", ("^myview/$", "mysite.myapp.views.myview"))
이제 다음과 같이 다시 작성할 수 있습니다:
from django.conf.urls.defaults import *
from mysite.myapp.views import myview
urlpatterns = patterns("", ("^myview/$", myview))
데코레이터를 사용할 때 유용한 응용 프로그램 중 하나를 볼 수 있습니다. 이 변경으로 *URLconf*의 뷰에 데코레이터를 적용할 수 있습니다. 따라서 로그인이 필요한 일반 뷰를 매우 쉽게 만들 수 있습니다:
from django.conf.urls.defaults import *
from django.contrib.auth.decorators import login_required
from django.views.generic.list_detail import object_list
from mysite.myapp.models import MyModel
info = {
"queryset": MyModel.objects.all(),
}
urlpatterns = patterns("", ("^myview/$", login_required(object_list), info))
두 구문(문자열 및 콜러블)이 모두 유효하며, 가까운 미래에도 계속 유효할 것이라는 점에 유의하십시오.
테스트 프레임워크¶
Django에는 이제 테스트 프레임워크가 포함되어 있으므로 두려움을 지루함으로 바꿀 수 있습니다. doctest
또는 :mod:`unittest`를 기반으로 테스트를 작성하고 간단한 테스트 클라이언트로 뷰를 테스트할 수 있습니다.
“픽스처”에 대한 새로운 지원도 있습니다. 즉, 테스트 시작 시 데이터베이스에 로드될 지원되는 직렬화 형식 중 하나로 저장된 초기 데이터입니다. 이렇게 하면 실제 데이터로 훨씬 쉽게 테스트할 수 있습니다.
자세한 내용은 :doc:`테스트 문서 </topics/testing/index>`를 참조하세요.
관리 인터페이스 개선¶
약간의 변경 사항이지만 매우 훌륭합니다: 사용자 추가 및 업데이트를 위한 전용 보기가 관리자 인터페이스에 추가되었으므로, 더 이상 관리자에서 해시된 암호 작업에 대해 걱정할 필요가 없습니다.
감사합니다¶
0.95 이후로 많은 사람들이 Django 개발에 있어 중요한 역할을 맡았습니다. 다음 분들의 노고에 감사드립니다:
- Russell Keith-Magee와 Malcolm Tredinnick의 주요 코드 기여. 이 릴리스는 그들 없이는 가능하지 않았을 것입니다.
- 0.95.1, 0.96 및 (바라건대) 향후 릴리스를 내놓는 작업에 대한 새로운 릴리스 관리자인 James Bennett에게 감사드립니다.
- 티켓 매니저 Chris Beaven(일명 SmileyChris), Simon Greenhill, Michael Radziej, Gary Wilson. 그들은 우리의 티켓을 멋지게 분류하여 제출하는 기념비적인 일을 맡는 데 동의했습니다. 작업할 내용을 파악하는 것이 이제 백만 배 더 쉬워졌습니다. 다시 한 번 감사드립니다.
- 버그 보고서, 패치 또는 티켓 댓글을 제출한 모든 사람. 200명 이상의 개발자가 0.96에 적용된 패치를 제출했습니다. 하지만 Django에 기여한 모든 사람은 :source:`AUTHORS`에 나열되어 있습니다.