장고 3.1의 새로운 기능

10987 단어 djangotutorialpython
Django 3.1은 2020년 8월 초에 출시될 예정이며 비동기 보기 및 미들웨어 지원, 비동기 테스트, 지원되는 모든 데이터베이스 백엔드(PostgreSQL뿐만 아니라)에 대한 JSONField, 업데이트된 관리 페이지, SECURE_REFERRER_POLICY을 포함하여 여러 가지 새로운 주요 기능과 많은 사소한 개선 사항이 함께 제공됩니다. , 그리고 훨씬 더. official release notes은 표준 참조이지만 이 게시물에서는 일부 하이라이트와 업그레이드 팁을 다룹니다.

업그레이드 방법



Django와 Python의 최신 버전을 사용하기 위해 노력해야 합니다. 그러면 더 빠르고 더 많이 지원되며 기능이 풍부한 코드가 생성됩니다. 업그레이드하려면 새로운 가상 환경을 생성하고 Django 3.1을 설치한 다음 전체 지원 중단 경고를 표시하는 -Wa 플래그를 추가하여 테스트 스위트를 실행합니다(예, 있습니까?).

(env) $ python -Wa manage.py test

프로젝트에 아직 테스트가 없는 경우에도 python -Wa manage.py runserver을 사용하여 몇 가지 경고를 볼 수 있습니다. 자세한 내용은 official upgrade list을 참조하십시오.

Django 3.1에는 Python 3.6, 3.7 또는 3.8이 필요합니다. Django prerequisites page에서 지원되는 Python 버전에 대해 자세히 알아볼 수 있습니다. Django의 버전 및 릴리스 정책이 궁금하시면 download page에서 지원되는 버전 타임라인과 향후 LTS(장기 지원) 릴리스를 보여줍니다.

추가 컨텍스트를 위해 Django Fellow Carlton Gibson이 공동 주최하는 Django Chat 팟캐스트에는 Django VersionsDjango Security Releases에 대한 에피소드가 있습니다.

비동기 뷰, 미들웨어, 테스트



버전 3.0에서 Django는 ASGI 지원으로 비동기식 여정을 본격적으로 시작했습니다. 3.1에서 Django는 이제 보기, 미들웨어 및 테스트/테스트 클라이언트가 포함된 완전한 비동기식 요청 경로를 지원합니다.

문서에 제공된 기본 예제는 0.5초 동안 기다린 다음 응답을 반환하는 요청을 만드는 것입니다.

# views.py
async def my_view(request):
    await asyncio.sleep(0.5)
    return HttpResponse('Hello, async world!')

이것은 WSGI를 실행하든 3.0에서 처음 추가된 ASGI 모드를 실행하든 상관없이 작동합니다.

보다 적절한 예는 인기 있는 HTTPX 라이브러리의 차세대 버전인 requests 을 사용하여 Django에서 비동기적으로 URL을 가져오는 것입니다.

교차 DB JSONField



modelsforms에 대한 JSONField 지원이 이제 PostgreSQL뿐만 아니라 모든 Django 지원 백엔드(MariaDB, MySQL, Oracle 및 SQLite)로 확장되었습니다. 이는 JSONField queries 을 완벽하게 지원합니다.

# models.py
from django.db import models 

class SoccerInfo(models.Model):
    data = models.JSONField()

SoccerInfo.objects.create(data={
    'team': 'Liverpool FC',
    'coaches': ['Klopp', 'Krawietz'],
    'players': {'forwards': ['Salah', 'Firmino', 'Mané']},
})
SoccerInfo.objects.filter(
    data__team='Liverpool',
    data__coaches__contains='Klopp',
    data__players__has_key='forwards',
).delete()

관리 레이아웃



관리자는 이제 큰 화면에서 더 쉽게 탐색할 수 있도록 왼쪽에 사이드바가 있습니다. 이전 이동 경로 패턴은 계속 사용할 수 있습니다. 새 사이드바를 비활성화하려면 AdminSite.enable_nav_sidebarFalse 으로 설정하십시오.

이전 관리자 보기는 다음과 같습니다.



다음은 사이드바가 있는 새로운 관리자 보기입니다.



경로 라이브러리



Django는 os.path 사용에서 더 현대적이고 간결한 pathlib 사용으로 전환했습니다. startproject 명령을 사용하여 새 프로젝트를 생성하면 자동으로 생성된 settings.py 파일의 기본값은 pathlib 입니다.

Django 3.0 버전은 다음과 같습니다.

# settings.py
import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

최신 Django 3.1 버전은 다음과 같습니다.

# settings.py
from pathlib import Path

BASE_DIR = Path(__file__).resolve(strict=True).parent.parent

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

SECURE_REFERRER_POLICY



SECURE_REFERRER_POLICY은 이제 더 안전한 'same-origin'으로 기본 설정됩니다. 이것은 Django 팀이 보안을 위해 수행하는 여러 단계 중 하나입니다. 프로덕션으로 전환하기 전에 Django deployment checklist 을 실행하여 프로젝트가 안전한지 확인할 수 있습니다. python manage.py check --deploy .

결론



더 많은 새로운 기능이 official release notes 에 광범위하게 문서화되어 있으며 전체 내용과 함께 제공되는 Django 3.1 문서를 읽어볼 가치가 있습니다.

모든 주요 새 Django 릴리스는 팀 작업이며 3.1도 예외는 아닙니다. Django Fellows 및 는 릴리스 프로세스가 원활하고 제시간에 이루어지도록 엄청난 양의 작업을 담당합니다. 비동기 기능에 대한 그의 작업과 교차 DB JSONFields 추가에 특히 감사드립니다.

Django의 지속적인 개발을 지원하려면 official fundraising page에서 지원하거나 GitHub Sponsor이 되어 지원하세요.

좋은 웹페이지 즐겨찾기