4.2.txt 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. ============================================
  2. Django 4.2 release notes - UNDER DEVELOPMENT
  3. ============================================
  4. *Expected April 2023*
  5. Welcome to Django 4.2!
  6. These release notes cover the :ref:`new features <whats-new-4.2>`, as well as
  7. some :ref:`backwards incompatible changes <backwards-incompatible-4.2>` you'll
  8. want to be aware of when upgrading from Django 4.1 or earlier. We've
  9. :ref:`begun the deprecation process for some features
  10. <deprecated-features-4.2>`.
  11. See the :doc:`/howto/upgrade-version` guide if you're updating an existing
  12. project.
  13. Python compatibility
  14. ====================
  15. Django 4.2 supports Python 3.8, 3.9, 3.10, and 3.11. We **highly recommend**
  16. and only officially support the latest release of each series.
  17. .. _whats-new-4.2:
  18. What's new in Django 4.2
  19. ========================
  20. Minor features
  21. --------------
  22. :mod:`django.contrib.admin`
  23. ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  24. * ...
  25. :mod:`django.contrib.admindocs`
  26. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  27. * ...
  28. :mod:`django.contrib.auth`
  29. ~~~~~~~~~~~~~~~~~~~~~~~~~~
  30. * The default iteration count for the PBKDF2 password hasher is increased from
  31. 390,000 to 480,000.
  32. :mod:`django.contrib.contenttypes`
  33. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  34. * ...
  35. :mod:`django.contrib.gis`
  36. ~~~~~~~~~~~~~~~~~~~~~~~~~
  37. * The :doc:`GeoJSON serializer </ref/contrib/gis/serializers>` now outputs the
  38. ``id`` key for serialized features, which defaults to the primary key of
  39. objects.
  40. * The :class:`~django.contrib.gis.gdal.GDALRaster` class now supports
  41. :class:`pathlib.Path`.
  42. :mod:`django.contrib.messages`
  43. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  44. * ...
  45. :mod:`django.contrib.postgres`
  46. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  47. * The new :lookup:`trigram_strict_word_similar` lookup, and the
  48. :class:`TrigramStrictWordSimilarity()
  49. <django.contrib.postgres.search.TrigramStrictWordSimilarity>` and
  50. :class:`TrigramStrictWordDistance()
  51. <django.contrib.postgres.search.TrigramStrictWordDistance>` expressions allow
  52. using trigram strict word similarity.
  53. :mod:`django.contrib.redirects`
  54. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  55. * ...
  56. :mod:`django.contrib.sessions`
  57. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  58. * ...
  59. :mod:`django.contrib.sitemaps`
  60. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  61. * ...
  62. :mod:`django.contrib.sites`
  63. ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  64. * ...
  65. :mod:`django.contrib.staticfiles`
  66. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  67. * ...
  68. :mod:`django.contrib.syndication`
  69. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  70. * ...
  71. Cache
  72. ~~~~~
  73. * ...
  74. CSRF
  75. ~~~~
  76. * ...
  77. Decorators
  78. ~~~~~~~~~~
  79. * ...
  80. Email
  81. ~~~~~
  82. * ...
  83. Error Reporting
  84. ~~~~~~~~~~~~~~~
  85. * ...
  86. File Storage
  87. ~~~~~~~~~~~~
  88. * ...
  89. File Uploads
  90. ~~~~~~~~~~~~
  91. * ...
  92. Forms
  93. ~~~~~
  94. * ...
  95. Generic Views
  96. ~~~~~~~~~~~~~
  97. * ...
  98. Internationalization
  99. ~~~~~~~~~~~~~~~~~~~~
  100. * ...
  101. Logging
  102. ~~~~~~~
  103. * ...
  104. Management Commands
  105. ~~~~~~~~~~~~~~~~~~~
  106. * :djadmin:`makemessages` command now supports locales with private sub-tags
  107. such as ``nl_NL-x-informal``.
  108. * The new :option:`makemigrations --update` option merges model changes into
  109. the latest migration and optimizes the resulting operations.
  110. Migrations
  111. ~~~~~~~~~~
  112. * The new :ref:`generic mechanism <migrations-removing-operation>` allows
  113. handling the deprecation of migration operations.
  114. Models
  115. ~~~~~~
  116. * ...
  117. Requests and Responses
  118. ~~~~~~~~~~~~~~~~~~~~~~
  119. * ...
  120. Security
  121. ~~~~~~~~
  122. * ...
  123. Serialization
  124. ~~~~~~~~~~~~~
  125. * ...
  126. Signals
  127. ~~~~~~~
  128. * ...
  129. Templates
  130. ~~~~~~~~~
  131. * ...
  132. Tests
  133. ~~~~~
  134. * ...
  135. URLs
  136. ~~~~
  137. * ...
  138. Utilities
  139. ~~~~~~~~~
  140. * The new ``encoder`` parameter for :meth:`django.utils.html.json_script`
  141. function allows customizing a JSON encoder class.
  142. * The private internal vendored copy of ``urllib.parse.urlsplit()`` now strips
  143. ``'\r'``, ``'\n'``, and ``'\t'`` (see :cve:`2022-0391` and :bpo:`43882`).
  144. This is to protect projects that may be incorrectly using the internal
  145. ``url_has_allowed_host_and_scheme()`` function, instead of using one of the
  146. documented functions for handling URL redirects. The Django functions were
  147. not affected.
  148. Validators
  149. ~~~~~~~~~~
  150. * ...
  151. .. _backwards-incompatible-4.2:
  152. Backwards incompatible changes in 4.2
  153. =====================================
  154. Database backend API
  155. --------------------
  156. This section describes changes that may be needed in third-party database
  157. backends.
  158. * ...
  159. Dropped support for MariaDB 10.3
  160. --------------------------------
  161. Upstream support for MariaDB 10.3 ends in May 2023. Django 4.2 supports MariaDB
  162. 10.4 and higher.
  163. Dropped support for MySQL 5.7
  164. -----------------------------
  165. Upstream support for MySQL 5.7 ends in October 2023. Django 4.2 supports MySQL
  166. 8 and higher.
  167. Dropped support for PostgreSQL 11
  168. ---------------------------------
  169. Upstream support for PostgreSQL 11 ends in November 2023. Django 4.2 supports
  170. PostgreSQL 12 and higher.
  171. Miscellaneous
  172. -------------
  173. * The undocumented ``SimpleTemplateResponse.rendering_attrs`` and
  174. ``TemplateResponse.rendering_attrs`` are renamed to ``non_picklable_attrs``.
  175. * The undocumented ``django.http.multipartparser.parse_header()`` function is
  176. removed. Use ``django.utils.http.parse_header_parameters()`` instead.
  177. * :ttag:`{% blocktranslate asvar … %}<blocktranslate>` result is now marked as
  178. safe for (HTML) output purposes.
  179. .. _deprecated-features-4.2:
  180. Features deprecated in 4.2
  181. ==========================
  182. ``index_together`` option is deprecated in favor of ``indexes``
  183. ---------------------------------------------------------------
  184. The :attr:`Meta.index_together <django.db.models.Options.index_together>`
  185. option is deprecated in favor of the :attr:`~django.db.models.Options.indexes`
  186. option.
  187. Migrating existing ``index_together`` should be handled as a migration. For
  188. example::
  189. class Author(models.Model):
  190. rank = models.IntegerField()
  191. name = models.CharField(max_length=30)
  192. class Meta:
  193. index_together = [["rank", "name"]]
  194. Should become::
  195. class Author(models.Model):
  196. ranl = models.IntegerField()
  197. name = models.CharField(max_length=30)
  198. class Meta:
  199. indexes = [models.Index(fields=["rank", "name"])]
  200. Running the :djadmin:`makemigrations` command will generate a migration
  201. containing a :class:`~django.db.migrations.operations.RenameIndex` operation
  202. which will rename the existing index.
  203. Miscellaneous
  204. -------------
  205. * The ``BaseUserManager.make_random_password()`` method is deprecated. See
  206. `recipes and best practices
  207. <https://docs.python.org/3/library/secrets.html#recipes-and-best-practices>`_
  208. for using Python's :py:mod:`secrets` module to generate passwords.
  209. * The ``AlterIndexTogether`` migration operation is deprecated.
  210. * The ``length_is`` template filter is deprecated in favor of :tfilter:`length`
  211. and the ``==`` operator within an :ttag:`{% if %}<if>` tag. For example
  212. .. code-block:: html+django
  213. {% if value|length == 4 %}…{% endif %}
  214. {% if value|length == 4 %}True{% else %}False{% endif %}
  215. instead of:
  216. .. code-block:: html+django
  217. {% if value|length_is:4 %}…{% endif %}
  218. {{ value|length_is:4 }}
  219. * ``django.contrib.auth.hashers.SHA1PasswordHasher``,
  220. ``django.contrib.auth.hashers.UnsaltedSHA1PasswordHasher``, and
  221. ``django.contrib.auth.hashers.UnsaltedMD5PasswordHasher`` are deprecated.