# Django 6.0.7 문서

# 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``에 대한 몇 가지 옵션이 픽스처 지원 추가로 변경되었습니다.

- 새로운 `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="\\")

### ENABLE_PSYCO 설정 제거

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

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