Nótaí scaoilte Django 4.2Link to this heading
3 Aibreán, 2023
Fáilte go dtí Django 4.2!
Clúdaíonn na nótaí scaoilte seo na:ref: gnéithe nua <whats-new-4.2>, chomh maith le roinnt athruithe: ref: athruithe neamh-chomhoiriúnacha ar chúl<backwards-incompatible-4.2> a mbeidh tú ag iarraidh a bheith ar an eolas fúthu agus tú ag uasghrádú ó Django 4.1 nó níos luaithe. <deprecated-features-4.2>We've:ref: `thosaigh an próiseas díghabhála do roinnt gnéithe `.
Féach an treoir:doc: /howto/upgrade-leagan má tá tionscadal atá ann cheana á nuashonrú agat.
<Long-term support release>Ainmnítear Django 4.2 mar a: téarma: `scaoileadh tacaíochta fadtéarmach `. Gheobhaidh sé nuashonruithe slándála ar feadh trí bliana ar a laghad tar éis a scaoilte Tiocfaidh deireadh le tacaíocht don LTS roimhe seo, Django 3.2, i mí Aibreáin 2024.
Comhoiriúnacht PythonLink to this heading
Tacaíonn Django 4.2 le Python 3.8, 3.9, 3.10, 3.11, agus 3.12 (amhail 4.2.8). Molaimid** go hard** agus ní thacaímid go hoifigiúil ach leis an scaoileadh is déanaí de gach sraith.
Cad atá nua i Django 4.2Link to this heading
Tacaíocht Psycopg 3Link to this heading
Tacaíonn Django anois le psycopg leagan 3.1.8 nó níos airde. <DATABASE-ENGINE>Chun do chód a nuashonrú, suiteáil an leabharlan:pypi: psycopg `, <psycopg>ní gá duit an: setting: `ENGINE a athrú mar thacaíonn django.db.backends.postgresql leis an dá leabharlann.
Is dóigh go ndéanfar tacaíocht do psycopg2 a dhíchur agus a bhaint ag pointe éigin sa todhchaí.
Bí ar an eolas go gcuireann psycopg` 3 roinnt athruithe briseacha isteach thar psycopg2`. Mar thoradh air sin, b'fhéidir go mbeidh ort roinnt athruithe a dhéanamh chun cuntas a thabhairt ar difríochtaí ó psycopg2.
Maolú don ionsaí BREACHLink to this heading
GZipMiddleware now includes a mitigation for
the BREACH attack. It will add up to 100 random bytes to gzip responses to make
BREACH attacks harder. Read more about the mitigation technique in the Heal
The Breach (HTB) paper.
Stóráil comhad i gcuimhneLink to this heading
Soláthraíonn an rang nua:class: django.core.files.storage.inmemoryStorage stóráil neamh-leanúnach atá úsáideach chun tástálacha a bhrostú trí rochtain diosca a sheachaint.
Stóráil comhaid saincheapthaLink to this heading
Ligeann an socrú nua:setting: STORAGES cúltaca stórála comhad saincheaptha iolracha a chumrú. Rialaíonn sé innill stórála freisin chun bainistiú: doc: comhad (an eochair ``"réamhshocraithe” ``) agus:doc: comhad stataich (an ``"staticfiles</topics/files> "`eochair </ref/contrib/staticfiles>).
Tá na sean-socruithe DEFAULT_FILE_STORAGE agus STATICFILES_STORAGE a dhíscríobh amhail an eisiúint seo.
MionghnéitheLink to this heading
django.contrib.adminLink to this heading
Is féidir téama dath éadrom nó dorcha an riaracháin a thosc anois sa Chomhéadan, chomh maith le bheith socraithe chun socrú an chórais a leanúint.
Is fearr le cruach cló an riaracháin clónna UI córais anois agus ní theastaíonn clónna a íoslódáil a thuilleadh Ina theannta sin, tá athróga CSS ar fáil chun na teaghlaigh cló réamhshocraithe a shárú níos éasca.
Tá roinnt bloic agus crúcaí scripteála breise anois ag an teimpléad:source: admin/delete_confirmation.html chun saincheapadh a éasc<django/contrib/admin/templates/admin/delete_confirmation.html> ú.
Tá na roghanna roghnaithe de:attr: ~django.contrib.admin.modeladmin.filter_horizontal agus:attr: ~django.contrib.admin.modeladmin.filter_vertical giuirléidí inscagtha anois.
Tá bloc nua
nav-breadcrumbssa teimpléad admin/base.html anois ina bhfuil an sainchomhartha nascleanúna agus an blocbreadcrumbs.ModelAdmin.list_editablenow uses atomic transactions when making edits.jQuery is upgraded from version 3.6.0 to 3.6.4.
django.contrib.authLink to this heading
Méadaítear an líon athraithe réamhshocraithe don hasher pasfhocal PBKDF2 ó 390,000 go 600,000.
UserCreationFormnow saves many-to-many form fields for a custom user model.Is é an nua:class: ~django.contrib.auth.forms.baseUserCreationForm an bunaicme a mholtar anois chun an fhoirm chruthaithe úsáideora a shaincheapadh.
django.contrib.gisLink to this heading
Aisíonn an:doc: GeoJSON serializer an eochair `id ``anois le haghaidh gnéithe sraithe</ref/contrib/gis/serializers> acha, a réamhshocraíonn ar phríomh-eochair na rudaí.
Tacaíonn an rang:class: ~django.contrib.gis.gdal.gdalraster anois:class: Pathlib.path.
Tacaíonn an rang:class: ~django.contrib.gis.geoip2.geoip2 anois le comhaid
.mmdba íoslódáil ó DB-IP.Ní chuimsíonn giuirléid teimpléad OpenLayers CSS inlíne a thuilleadh (a bhaineann an iar-bhloc map_css freisin) chun polasaí slándála Ábhar dian a chomhlíonadh níos fearr.
OpenLayersWidgetis now based on OpenLayers 7.2.2 (previously 4.6.5).<django.contrib.gis.db.models.functions.IsEmpty>Ligeann an léiriú nua:lookup: isempty agus: class: `isEmpty () `geoiméadraí folmha a scagadh ar PostGIS.
Ceadaíonn na feidh <django.contrib.gis.db.models.functions.FromWKB><django.contrib.gis.db.models.functions.FromWKT>meanna nua:aicme: fromWKB () `agus:aicme: `fromWKT () geoiméadrachtaí a chruthú ó ionadaíochtaí dénártha aitheanta (WKB) agus téacs aitheanta (WKT).
django.contrib.postgresLink to this heading
<django.contrib.postgres.search.TrigramStrictWordSimilarity><django.contrib.postgres.search.TrigramStrictWordDistance>Ceadaíonn an cuardach nua:lookup: trigram_strict_word_similar, agus an:class: trigramstrictWordSimilarity () `agus:class: `trigramstrictWordDistance () cosúlacht focal dian trigram a úsáid.
Tacaíonn an cuardach: lookup: arrayfield.overlap anois le
QuerySet.values () ``agus ``values_list ()mar thaobh na láimhe deise.
django.contrib.sitemapsLink to this heading
Ligeann an modh nua:meth: .SiteMap.Get_Languages_for_Item liosta na dteangacha a bhfuil an mír ar taispeáint dóibh a shaincheapadh.
django.contrib.staticfilesLink to this heading
ManifestStaticFilesStoragenow has experimental support for replacing paths to JavaScript modules inimportandexportstatements with their hashed counterparts. If you want to try it, subclassManifestStaticFilesStorageand set thesupport_js_module_import_aggregationattribute toTrue.Soláthraíonn an tréith nua:attr: .manifestStaticFilesStorage.manifest_hash hash thar gach comhad sa manifest agus athraíonn sé aon uair a athraíonn ceann de na comhaid.
Cúltaca bunachar sonraíLink to this heading
<database-role>Tacaítear anois leis an rogha nua
"assume_role"in:setting: OPTIONS ar PostgreSQL chun ligean an ról seisiúin `a shonrú.<database-server-side-parameters-binding>Tacaítear anois leis an rogha nua
"server_side_binding"in:setting: OPTIONS ar PostgreSQL lepsycopg3.1.8+ chun cead a úsáid:ref: cúrsaí ceangailteacha taobh freastalaí.
Tuairisc EarráideLink to this heading
<657>Taispeánann an leathanach dífhabhtaithe anois:pep: nótaí eisceachta `agus <678>:pep: `suíomhanna earráide mion-ghráinne ar Python 3.11+.
Déileáiltear le fianáin seisiúin mar dhintiúir anois agus mar sin folaítear iad agus cuirtear réaltaí (
**********) ina n-ionad i dtuairiscí earráide.
FoirmeachaLink to this heading
ModelFormnow accepts the newMetaoptionformfield_callbackto customize form fields.modelform_factory()now respects theformfield_callbackattribute of theform’sMeta.
IdirnáisiúnúLink to this heading
Cuireadh tacaíocht agus aistriúcháin leis an teanga Cúirdis Lárnach (Sorani).
LogáilLink to this heading
Logálann an logghair:ref: django-db-logger fiosruithe bainistíochta idirbheart anois (
BEGIN, COMMIT`, agusROLLBACK) ag an leibhéal ``DEBUG`.
Orduithe BainistíochtaLink to this heading
makemessagescommand now supports locales with private sub-tags such asnl_NL-x-informal.Comhcheanglaíonn an rogha nua:option: makemigrations --update athruithe samhail san imirce is déanaí agus déanann sé na hoibríochtaí mar thoradh air a bharrfheabhsú.
ImirceLink to this heading
Tacaíonn imirce anois le sraitheadh rudaí
Enum.flag.
SamhlaLink to this heading
Tacaíonn ``QuerySet` go forleathan anois le scagadh i gcoinne: ref: `feidhmeanna fuinneog seachas cuardaigh scagaire disjunctive i gcoinne feidhmeanna fuinneoige agus comhiomlánú á dhéanamh.
: meth: Tacaíonn ~.querySet.Prefetch_Related anois:class: ~django.db.models.prefetch rudaí le ceisteanna slisnithe.
Registering lookups on
Fieldinstances is now supported.Ligeann an argóint nua
robustle haghaidh: func: `~django.db.transaction.on_commit 'gníomhartha a dhéanamh ar féidir leo teip a dhéanamh tar éis idirbheart bunachar sonraí a dhéanamh go rathúil.Léiríonn an abairt nua:class: KT () <django.db.models.fields.json.KT>`luach téacs eochair, innéacs nó athrú cosáin de:class: `~django.db.models.jsonField.
Nownow supports microsecond precision on MySQL and millisecond precision on SQLite.F()expressions that outputBooleanFieldcan now be negated using~F()(inversion operator).Soláthraíonn
Model ``leaganacha asincrónacha anois de roinnt modhanna a úsáideann an bunachar sonraí, ag baint úsáide as réimír ``a: :meth: ~.model.Adelete, :meth: ~.model.arefresh_from_db, agus:meth: ~.model.asave.Soláthraíonn bainisteoirí gaolmhara leaganacha asincrónacha de mhodhanna anois a athraíonn sraith rudaí gaolmhara, ag baint úsáide as réimír
a: :meth: ~.relatedManager.aAdd, :meth: ~.relatedManager.aRemove, agus:meth: ~.relatedManager.aset.CharField.max_lengthis no longer required to be set on PostgreSQL, which supports unlimitedVARCHARcolumns.
Iarrataí agus FreagraíLink to this heading
StreamingHttpResponsenow supports async iterators when Django is served via ASGI.
TástálachaLink to this heading
Formálaíonn an rogha: rogha test --debug-sql fiosruithe SQL anois le sqlparse.
Tacaíonn ranga:Class: ~django.test.requestFactory, :class: ~django.test.asyncRequestFactory, :class: ~django.test.client, agus:class: ~django.test.asyncClient anois leis an paraiméadar
headers, a ghlacann le foclóir ainmneacha agus luachanna ceanntásc. Ligeann sé seo comhréir níos nádúrtha chun ceanntásca a dhearbhú.# Before: self.client.get("/home/", HTTP_ACCEPT_LANGUAGE="fr") await self.async_client.get("/home/", ACCEPT_LANGUAGE="fr") # After: self.client.get("/home/", headers={"accept-language": "fr"}) await self.async_client.get("/home/", headers={"accept-language": "fr"})
FóntaisLink to this heading
Ligeann an paraiméadar nua
encoderle haghaidh: meth: django.utils.html.json_script aicme ionchódóra JSON a shaincheapadh.Stíleann an cóip phríobháideach inmheánach de urllib.parse.urlsplit () ``anois `'r'
, `n ', agus`'t'`` (féach: cve: 2022-0391 agus:bpo: 43882). Tá sé seo chun tionscadail a d'fhéadfadh a bheith ag úsáid mícheart an fheidhm inmheánach ``url_has_allowed_host_and_scheme () `a chosaint, in ionad ceann de na feidhmeanna doiciméadaithe a úsáid chun atreoruithe URL a láimhseáil. Níor chuir tionchar ar fheidhmeanna Django.Tugann an fheidhm nua:func: django.utils.http.content_disposition_header luach ceanntásc HTTP
Content-Dispositionmar a shonraítear ar:rfc: 6266.
BailíochtóiríLink to this heading
Déantar an liosta de na pasfhocail choitianta a úsáideann
CommonPasswordValidatora nuashonrú go dtí an leagan is déanaí.
Athruithe neamh-chomhoiriúnacha ar ais i 4.2Link to this heading
API cúltaca bunachar sonraíLink to this heading
Déanann an rannán seo cur síos ar athruithe a d’fhéadfadh a bheith ag teastáil ar dhroim bhunachar sonraí tríú páirtí.
Baintear
databaseFeatures.allows_group_by_pk ``mar níor fhan sé ach freastal ar síneadh MySQL a cuireadh in ionad trí bhrath spleáchais fheidhmiúil ceart i MySQL 5.7.15. Tabhair faoi deara go dtacaítear le ``DatabaseFeatures.allows_group_by_selected_pksfós agus ba chóir é a chumasú má thacaíonn do chúlcheann le brath spleáchais fheidhmiúil i gclásailGROUP BYmar a shonraítear leis an gcaighdeán SQL:1999`.inspectdbnow usesdisplay_sizefromDatabaseIntrospection.get_table_description()rather thaninternal_sizeforCharField.
Tacaíocht titim do MariaDB 10.3Link to this heading
Críochnaíonn tacaíocht suas srutha do MariaDB 10.3 i mí na Bealtaine 2023. Tacaíonn Django 4.2 le MariaDB 10.4 agus níos airde.
Tacaíocht titim do MySQL 5.7Link to this heading
Críochnaíonn tacaíocht upstream do MySQL 5.7 i mí Dheireadh Fómhair 2023. Tacaíonn Django 4.2 le MySQL 8 agus níos airde.
Tacaíocht titim do PostgreSQL 11Link to this heading
Críochnaíonn tacaíocht suas srutha do PostgreSQL 11 i mí na Samhna 2023. Tacaíonn Django 4.2 le PostgreSQL 12 agus níos airde.
B'fhéidir go mbeadh gá anois ag socrú update_fields i Model.save () `Link to this heading
<django.db.models.Model.save>D'fhonn colúin neamhriachtanacha a nuashonrú a sheachaint, téann :meth: .queryset.update_or_create anois update_fields chuig na glaonna:: Model.save () `. Mar thoradh air sin, ba chóir aon réimsí a mhodhnaítear sna modhanna saincheaptha ``save () ``a chur leis an argóint eochairfhocal ``update_fields` sula nglactar ar super (). Féach: Ref: overriding-model-methods le haghaidh tuilleadh sonraí.
Tacaíocht titim do chomhiomlánú amh ar MySQLLink to this heading
Ceadaíonn MySQL 8+ spleáchas feidhmiúla ar cholúin ``GROUP BY ``, mar sin baintear an réamh-Django 4.2 maidir le grúpáil de réir eochracha príomhúil an phríomh-thábla. Mar thoradh air sin, ní thacaítear le comhiomlánú ``RawSQL () a úsáid a thuilleadh ar MySQL mar níl aon bhealach ann chun a chinneadh an bhfuil comhiomlánú den sórt sin de dhíth nó bailí sa chlásal ``GROUP BY. Úsáid: ref: `feidhmeanna comhiomlánaithe' ina ionad.
IlghnéitheachLink to this heading
Baintear an fheidhm ``django.http.multipartparser.parse_header () `neamhdhoiciméadaithe. Úsáid ``django.utils.http.parse_header_parameters () ``ina ionad.
{% blocktranslate asvar … %}result is now marked as safe for (HTML) output purposes.Baintear an tréith HTML ``autofocus` sa bhosca cuardaigh riaracháin mar d'fhéadfadh sé a bheith mearbhall do léitheoirí scáileáin.
Ní chruthaíonn an rogha:option: makemigrations --check comhaid imirce in easnamh a thuilleadh.
Baintear an argóint
aliasdo:meth: .expression.get_group_by_cols.Méadaítear an leagan íosta tacaithe de sqlparse` ó 0.2.2 go 0.3.1.
Baintear an paraiméadar
diúltneamhdhoiciméadaithe den léir:class: ~django.db.Models.Exists.Baintear argóint
is_resumden mhodh ``Query.add_annotation () ``neamhdhoiciméadaithe.Méadaítear an leagan íosta tacaithe de SQLite ó 3.9.0 go 3.21.0.
Méadaítear an leagan íosta tacaithe de asgiref` ó 3.5.2 go 3.6.0.
UserCreationFormnow rejects usernames that differ only in case. If you need the previous behavior, useBaseUserCreationForminstead.Méadaítear an leagan íosta tacaithe de mysqlclient` ó 1.4.0 go 1.4.3.
Méadaítear an leagan íosta tacaithe de
argon2-cffió 19.1.0 go 19.2.0.Méadaítear an leagan íosta tacaithe de
Pillowó 6.2.0 go 6.2.1.Méadaítear an leagan íosta tacaithe de jinja2` ó 2.9.2 go 2.11.0.
Méadaítear an leagan íosta tacaithe de: pypi: `redis-py <redis>`ó 3.0.0 go 3.4.0.
Ní mór réad cosúil le comhad a sholáthar do wsgi.input` rudaí WSGIRequest` de láimh. Roimhe seo, bhí Django níos saoire ná an t-iompar a bhfuiltear ag súil leis mar a shonraíonn sonraíocht WSGI.
Baintear tacaíocht do PROJ` <5.
SMTP EmailBackend now verifies a
hostnameandcertificates. If you need the previous behavior that is less restrictive and not recommended, subclassEmailBackendand override thessl_contextproperty.
Gnéithe atá díscríofa i 4.2Link to this heading
Tá rogha index_together ``díluasaithe i bhfabhar ``indexesLink to this heading
Tá an rogha Meta.index_Together` a dhíchur i bhfabhar an roghna:attr: ~Django.db.Models.Options.Indexes.
Ba chóir an imirce atá ann cheana féin a láimhseáil mar imirce. Mar shampla:
class Author(models.Model):
rank = models.IntegerField()
name = models.CharField(max_length=30)
class Meta:
index_together = [["rank", "name"]]
Ba chóir go mbeadh:
class Author(models.Model):
rank = models.IntegerField()
name = models.CharField(max_length=30)
class Meta:
indexes = [models.Index(fields=["rank", "name"])]
Ag rith an t-ordú:djadmin: makemigrations ginfidh imirce ina bhfuil oibríocht a:class: ~django.db.migrations.operations.renameIndex a athainmneoidh an t-innéacs atá ann cheana. Ansin, smaoinigh ar imirce a scrúdú chun `index_together ``a bhaint as imirce stairiúla.
Ní thugtar tacaíocht oifigiúil anois leis an oibríocht imirce AlterIndexTogether ach amháin do chomhaid imirce réamh-Django 4.2. Ar chúiseanna comhoiriúnachta ar chúl, tá sé fós mar chuid den API poiblí, agus níl aon phlean ann é a dhíchur nó a bhaint, ach níor cheart é a úsáid le haghaidh imirce nua. Úsáid:aicme: ~django.db.migrations.operations.addIndex agus:class: ~django.db.migrations.operations.removeIndex oibríochtaí ina ionad.
Tá litríochtaí teaghrán ionchódaithe JSON a chur chuig JSONField míluasaitheLink to this heading
“JSONField” agus a chuardaigh agus comhiomlánaithe gaolmhara a úsáideadh chun litríochtaí teaghrán ionchódaithe JSON a chur ar aghaidh a bhí ina chúis le débhríocht ar an raibh litríochtaí teaghráin ionchódaithe cheana féin ó pheirspictíocht cúltaca bunachar sonraí.
Le linn na tréimhse díghabhála déanfar iarracht litríochtaí teaghrán a dhíchódú JSON agus astófar rabhadh maidir le rath a thugann le fios foirmeacha neamh-ionchódaithe a rith ina ionad sin.
Cód a d'úsáid chun litríochtaí teaghrán ionchódaithe JSON a rith:
Document.objects.bulk_create(
Document(data=Value("null")),
Document(data=Value("[]")),
Document(data=Value('"foo-bar"')),
)
Document.objects.annotate(
JSONBAgg("field", default=Value("[]")),
)
Ba chóir go mbeadh:
Document.objects.bulk_create(
Document(data=Value(None, JSONField())),
Document(data=[]),
Document(data="foo-bar"),
)
Document.objects.annotate(
JSONBAgg("field", default=[]),
)
Ó Django 5.1+ déanfar litríochtaí teaghrán a léirmhíniú go hinchinneach mar litríochtaí teaghrán JSON.
IlghnéitheachLink to this heading
The
BaseUserManager.make_random_password()method is deprecated. See recipes and best practices for using Python'ssecretsmodule to generate passwords.<if>Tá an scagaire teimpléad
long_is ``a dhíchur i bhfabhar: tfilter: `leng` agus an oibreoir ``==laistigh de chlib: ttag: {% if%}. Mar shampla{% if value|length == 4 %}…{% endif %} {% if value|length == 4 %}True{% else %}False{% endif %}in ionad:
{% if value|length_is:4 %}…{% endif %} {{ value|length_is:4 }}Tá
Django.Contrib.Auth.Hashers.Sha1PasswordHasher, Django.Contrib.Auth.Hashers.UnsaltedSha1PasswordHasher`, agusDjango.Contrib.Auth.Hashers.UnsaltedMd5PasswordHasher.Tá
django.contrib.postgres.fields.cicharfieldluasghabháilte i bhfabhar ``CharField (db_collation="...”) ``le comparáid neamh-chinntitheach cás-neamh-íogair.Tá
django.contrib.postgres.fields.Ciemailfieldscoite i bhfabhar ``EmailField (db_collation="...”) ``le comhlánú neamhchinntiúil cás-neamh-íogair.Tá
django.contrib.postgres.fields.citextFieldscoite i bhfabhar ``TextField (db_collation="...”) ``le comhlánú neamhchinntiúil cás-neamh-íogair.Tá mixin
django.contrib.postgres.fields.citextmeasctha.Tá na tréithe
map_heightagusmap_widthde BasegeometryWidget` a dhíchur, bain úsáid as CSS chun giuirléidí léarscáileála a mhéadú ina ionad sin.Tá
SimpleTestCase.AssertFormSetError () ``díluaite i bhfabhar ``AssertFormSetError ().Tá ``TransactionTestCase.assertQuerySetEqual () díluaite i bhfabhar ``AssertQuerySetEqual () `.
Tá argóintí seasaimh a chur chuig
SigneragusTimeStampSigneri bhfabhar argóintí eochairfhocal amháin.Tá an socrú
DEFAULT_FILE_STORAGEa dhíchur i bhfabhar ``STORAGES ["réamhshocraithe"] ``.Tá an socrú
STATICFILES_STORAGEa dhíchur i bhfabhar ``STORAGES ["staticfiles"] ``.Tá an fheidhm ``django.core.files.storage.get_storage_class () ``díluaite.
Tuairimí ar cholúin agus táblaíLink to this heading#
<django.db.models.Options.db_table_comment>Ceadaíonn na roghanna nua:attr: Field.db_Comment <django.db.models.Field.db_comment>`agus:attr: `Meta.db_Table_Comment tuairimí a chruthú ar cholúin agus táblaí, faoi seach. Mar shampla:
<django.db.models.Options.db_table_comment>Chomh maith leis sin, ceadaíonn an oibríocht nua:class: ~django.db.migrations.Operations.AlterModelTableComment `tráchtanna tábla a athrú atá sainmhínithe in:attr: `Meta.DB_Table_Comment.