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을 생성할 수 있지만, 데이터베이스 자체에는 이전 형식으로 명명된 제약 조건이 포함된다는 것입니다. 이로 인해 데이터베이스 서버는 존재하지 않는 제약 조건 수정에 대한 오류 메시지를 발생시킵니다.

이 문제를 해결해야 하는 경우, 다음 두 가지 방법을 사용할 수 있습니다:

  1. ``manage.py``의 출력을 파일로 리디렉션하고, 실행하기 전에 올바른 제약 조건 이름을 사용하도록 생성된 SQL을 편집합니다.

  2. ``manage.py sqlall``의 출력을 검사하여 새로운 스타일의 제약 조건 이름을 확인하고, 이를 가이드로 사용하여 데이터베이스의 기존 제약 조건 이름을 바꾸십시오.

``manage.py``의 이름 변경

``manage.py``에 대한 몇 가지 옵션이 픽스처 지원 추가로 변경되었습니다.

  • 새로운 dumpdataloaddata 명령이 있으며, 이는 예상할 수 있듯이 데이터베이스로/에서 데이터를 덤프하고 로드합니다. 이러한 명령은 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="\\")

ENABLE_PSYCO 설정 제거

ENABLE_PSYCO 설정은 더 이상 존재하지 않습니다. 설정 파일에 ``ENABLE_PSYCO``가 포함되어 있으면 아무런 효과가 없습니다. Psyco_를 사용하려면 미들웨어 클래스를 작성하여 활성화하는 것이 좋습니다.

0.96의 새로운 기능은 무엇입니까?

이 개정판은 1000개 이상의 소스 커밋과 400개 이상의 버그 수정을 나타내므로, 모든 변경 사항을 카탈로그화할 수는 없습니다. 여기에서는 이 릴리스에서 가장 눈에 띄는 변경 사항을 설명합니다.

새 양식 라이브러리

django.newforms is Django’s new form-handling library. It’s a replacement for django.forms, the old form/manipulator/validation framework. Both APIs are available in 0.96, but over the next two releases we plan to switch completely to the new forms system, and deprecate and remove the old system.

이 전환에는 세 가지 요소가 있습니다:

  • We’ve copied the current django.forms to django.oldforms. This allows you to upgrade your code now rather than waiting for the backwards-incompatible change and rushing to fix your code after the fact. Just change your import statements like this:

    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`에 나열되어 있습니다.