Выпуск web-Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° Django 3.0

Бостоялся Ρ€Π΅Π»ΠΈΠ· web-Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° Django 3.0, написанного Π½Π° языкС Python ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’Π΅Ρ‚ΠΊΠ° Django 3.0 отнСсСна ΠΊ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ выпусков с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ сроком ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ обновлСния Π΄ΠΎ апрСля 2021 Π³ΠΎΠ΄Π°. LTS-Π²Π΅Ρ‚ΠΊΠ° 2.22 Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ Π΄ΠΎ апрСля 2022 Π³ΠΎΠ΄Π°, Π° Π²Π΅Ρ‚ΠΊΠ° 1.11 Π΄ΠΎ апрСля 2020 Π³ΠΎΠ΄Π°. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π²Π΅Ρ‚ΠΊΠΈ 2.1 ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½Π°.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ:

  • ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² асинхронном Ρ€Π΅ΠΆΠΈΠΌΠ΅ с Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π² Ρ„ΠΎΡ€ΠΌΠ΅ ASGI-прилоТСния. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ интСрфСйс ASGI (Asynchronous Server Gateway Interface) Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ ΠΊΠ°ΠΊ Π·Π°ΠΌΠ΅Π½Π° WSGI, нацСлСнная Π½Π° обСспСчСниС взаимодСйствия сСрвСров, Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² асинхронном Ρ€Π΅ΠΆΠΈΠΌΠ΅. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° запуска с использованиСм WSGI сохранСна, Π° связанный с асинхронным Ρ€Π΅ΠΆΠΈΠΌΠΎΠΌ ΠΊΠΎΠ΄ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ запускС Π² окруТСниях Π½Π° Π±Π°Π·Π΅ ASGI.

    Для асинхронного Ρ€Π΅ΠΆΠΈΠΌΠ° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий (event loop), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ нСдопускаСтся Π²Ρ‹Π·ΠΎΠ² ΠΊΠΎΠ΄Π°, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ «async unsafe». К Ρ‚Π°ΠΊΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ отнСсСны, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ c Π‘Π£Π‘Π” (ORM), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² асинхронном контСкстС (Π² этом случаС Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ошибка SynchronousOnlyOperation) ΠΈ слСдуСт Π²Ρ‹Π½ΠΎΡΠΈΡ‚ΡŒ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ синхронный ΠΏΠΎΡ‚ΠΎΠΊ.

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ спСциализированныС пСрСчисляСмыС Ρ‚ΠΈΠΏΡ‹ TextChoices, IntegerChoices ΠΈ Choices, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для опрСдСлСния тСкстовых ΠΈ цСлочислСнных ΠΏΠΎΠ»Π΅ΠΉ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ нСобходимости хранСния Π² полях Π½Π°Π±ΠΎΡ€ΠΎΠ² Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠΊ, транслируСмых Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΈ:

    class YearInSchool(models.TextChoices):
    FRESHMAN = ‘FR’, _(‘Freshman’)
    SOPHOMORE = ‘SO’, _(‘Sophomore’)
    JUNIOR = ‘JR’, _(‘Junior’)
    SENIOR = ‘SR’, _(‘Senior’)
    GRADUATE = ‘GR’, _(‘Graduate’)

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ указания Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, выводящих BooleanField, Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ… QuerySet Π±Π΅Π· ΠΈΡ… ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ аннотирования, ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ.
  • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π‘Π£Π‘Π” MariaDB 10.1 ΠΈ Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²Ρ‹Ρ… выпусков.
  • Для PostgreSQL Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ класс ExclusionConstraint для использования ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° Π±Π°Π·Π΅ выраТСния EXCLUDE;
  • ΠŸΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Python 3.5.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ