Nótaí scaoilte Django 1.6.3Link to this heading

21 Aibreán, 2014

Socraíonn Django 1.6.3 roinnt fabhtanna i 1.6.2, lena n-áirítear trí shaincheist slándála, agus déanann sé athrú amháin atá neamh-chomhoiriúnach ar chúl:

Forghníomhú cód gan choinne ag baint úsáide as ``reverse () ``Link to this heading

Tá láimhseáil URL Django bunaithe ar mhapáil patrúin regex (a léiríonn na URLanna) le tuairimí inghlaonta, agus is éard atá i bpróiseáil Django féin URL iarrtha a mheaitseáil i gcoinne na patrúin sin chun an dearcadh cuí le glaoch a chinneadh.

Soláthraíonn Django feidhm áisiúlachta freisin - reverse () ``- a dhéanann an próiseas seo sa treo eile. Tógann an fheidhm ``reverse () ``faisnéis faoi radharc agus filleann URL ar ais a chuirfeadh an dearcadh sin. Spreagtar úsáid ``reverse () ``d'fhorbróirí feidhmchláir, toisc go mbíonn aschur ``reverse () bunaithe i gcónaí ar na patrúin URL reatha, rud a chiallaíonn nach gá d'fhorbróirí cód eile a athrú agus athruithe á dhéanamh ar URLanna.

Síniú argóint amháin le haghaidh ``reverse () ``ná cosán poncaí Python a rith chuig an radharc atá ag teastáil. Sa chás seo, iompórtálfaidh Django an modúl a léirítear leis an gcosán poncaigh sin mar chuid den URL mar thoradh air a ghiniúint. Má tá fo-iarsmaí ama allmhairithe ag modúl den sórt sin, tarlóidh na fo-iarsmaí sin.

Mar sin is féidir le hionsaitheoir cód a fhorghníomhú gan choinne, i bhfianaise na gcoinníollacha seo a leanas:

  1. Tá tuairimí amháin nó níos mó i láthair a thógann URL bunaithe ar ionchur úsáideora (de ghnáth, paraiméadar “eile” eile i sreang fiosrúcháin a léiríonn cá háit le hathatreorú nuair a bheidh gníomh críochnaithe go rathúil).

  2. Tá modúl amháin nó níos mó ar eolas ag ionsaitheoir ar chonair allmhairithe Python an fhreastalaí, a dhéanann forghníomhú cód le fo-iarsmaí ar allmhairiú.

Chun é seo a leigheas, ní ghlacfaidh reverse () ``anois ach cosáin ponctha agus a allmhairiú bunaithe ar na modúil ina bhfuil radharc atá liostaithe sa tionscadal:doc: `Cumraíocht patrún URL </topics/http/urls>, chun a chinntiú nach féidir nó nach ndéanfar ach modúil an forbróir atá beartaithe a allmhairiú ar an mbealach seo.

D'fhéadfadh taiscéáil leathanaigh gan ainm comhartha CSRF a nochtadhLink to this heading

Cuimsíonn Django araon a:doc: `creat caching 'agus córas le haghaidh: doc: `ionsaithe bréagaithe </topics/cache> iarratais tras-láithreáin (CSRF) a chos</ref/csrf/> c'. Tá an córas cosanta CSRF bunaithe ar nonce randamach a sheoltar chuig an gcliant i bhfianán a chaithfidh an cliant a sheoladh ar iarratais amach anseo agus, i bhfoirmeacha, luach i bhfolach a chaithfear a chur isteach ar ais leis an bhfoirm.

Cuimsíonn an creat taiscéála rogha chun freagraí a thaisceadh ar chliaint gan ainm (ie, neamhfhíordheimhnithe).

Nuair a bhíonn cliant nach raibh fianán CSRF aige an chéad iarratas gan ainm chuig leathanach ar leathanach ar leathanach ar leith, déanfaidh an creat taisce an fianán CSRF a thaisceadh freisin agus seirbheálfaidh an nóiméad céanna do chliaint gan ainm eile nach bhfuil fianán CSRF acu. Féadann sé seo ligean d'ionsaitheoir luach bailí fianán CSRF a fháil agus ionsaithe a dhéanamh a sheachnóidh an seiceáil don fhianán.

Chun é seo a leigheas, ní dhéanfaidh an creat taiscéála freagraí den sórt sin a thuilleadh. Is é an heuristic seo ná:

  1. Mura gcuirfeadh aon fhianáin isteach san iarratas isteach, agus

  2. Má chuir an freagra fianán amháin nó níos mó, agus

  3. Má shocraítear an ceannteideal Vary: Cookie ar an bhfreagra, ansin ní chuirfear an freagra a chosc.

Cineál MySQLLink to this heading

Is eol go bhfuil bunachar sonraí MySQL “typecast” ar cheisteanna áirithe; mar shampla, nuair a fhiosraítear tábla ina bhfuil luachanna teaghráin, ach ag baint úsáide as ceist a scagairíonn bunaithe ar luach sláimhreacha, cuirfidh MySQL na teaghráin go sláimhreacha ar dtús agus toradh a thabhairt ar ais bunaithe air sin.

Má dhéantar ceist gan luachanna a thiontú go dtí an cineál cuí ar dtús, féadfaidh sé seo torthaí gan choinne a thabhairt, cosúil leis an méid a tharlódh dá ndéanfaí an cheist féin a ionramháil.

Tá ranganna réimse samhail Django ar an eolas faoina gcineálacha féin agus déanann mórchuid na ranganna den sórt sin comhshó follasach argóintí fiosrúcháin go dtí an cineál ceart ar leibhéal bunachar sonraí Mar sin féin, níor thiontaigh trí rang réimse samhail a gcuid argóintí i gceart:

Nuashonraíodh na trí réimse seo chun a n-argóintí a thiontú go dtí na cineálacha cearta sula gcuirtear ceisteanna orthu.

Ina theannta sin, tugtar rabhadh anois trí dhoiciméadú chun a chinntiú go ndéanfaidh a ranganna réimse saincheaptha tiontaithe cineál cuí, agus molfar d'úsáideoirí mod <django.db.models.query.QuerySet.raw><django.db.models.query.QuerySet.extra>hanna fiosrúcháin: meth: raw () `agus:meth: `extra () - a ligeann don fhorbróir blúirí SQL nó SQL a chinntiú go ndéanann siad comhshó láimhe.

Éilíonn ``select_for_update () ``idirbheartLink to this heading

Historically, queries that use select_for_update() could be executed in autocommit mode, outside of a transaction. Before Django 1.6, Django's automatic transactions mode allowed this to be used to lock records until the next write operation. Django 1.6 introduced database-level autocommit; since then, execution in such a context voids the effect of select_for_update(). It is, therefore, assumed now to be an error and raises an exception.

Rinneadh an t-athrú seo <DATABASE-ATOMIC_REQUESTS>toisc gur féidir earráidí den sórt sin a bheith mar thoradh ar aip a bhfuil súil le hidirbhearta domhanda a áireamh (m.sh.: setting: ATOMIC_REQUESTS `socraithe go `True`), nó sean-iompar uathoibrithe Django, i dtionscadal a ritheann gan iad; agus ina bhreis, féadfaidh earráidí den sórt sin a léiriú mar fhabhtanna éillithe sonraí.

Féadfaidh an t-athrú seo a bheith ina chúis le teipeanna tástála má úsáideann tú ``select_for_update () ``i rang tástála atá ina fho-aicme de:class: ~django.test.transactionTestCase seachas: ~django.test.testcase seachas: ~django.test.testcase.

Buigdheisiúcháin agus athruithe eileLink to this heading

  • Déantar ábhar a aisghabhadh ón leabharlann GeoIP a dhíchódú i gceart anois óna ionchódú réamhshocraithe ``iso-8859-1` (:ticket: 21996).

  • Seasta AttributeError nuair a úsáidtear: meth: ~django.db.models.query.queryset.bulk_create le ForeignObject (:ticket: 21566).

  • Timpiste seasta de QuerySets a úsáideann ``F () + timedelta () ``nuair a cuireadh a gcuid ceist le tiomsú níos mó uair amháin (:ticket: 21643).

  • Cosc ar thréith aicme saincheaptha widget de:class: ~django.forms.IntegerField ó fho-aicmí a fhorscríobh leis an gcód ina modh __init__ (:ticket: 22245).

  • Feabhsaithe:func: ~django.utils.html.strip_tags cruinneas (ach ní féidir leis toradh sábháilte HTML a ráthú fós, mar a luaitear sa doiciméadú).

  • Socraigh aischéimniú sa tiomsaitheoir SQL: mod: django.contrib.gis le haghaidh réimsí neamhchoincréite (:ticket: 22250).

  • Socraithe:attr: ModelAdmin.preserve_filters <django.contrib.admin.ModelAdmin.preserve_filters>`agus suíomh á reáchtáil le réimír URL (:ticket: `21795).

  • Socraigh timpiste sa bhfóntais bhainistíochta ``find_command ``nuair nár socraíodh an t-athróg comhshaoil ``PATH` (:ticket: 22256).

  • Socraithe: DJADmin: changepassword ar Windows (:ticket: 22364).

  • Seachnaíodh eisceachtaí deacrachta a scáthú ar MySQL (:ticket: 22291).

  • Eisceachtaí bunachar sonraí fillte i ``_set_autocommit ``(:ticket: 22321).

  • Atomachas seasta nuair a dhúnadh nasc bunachar sonraí nó nuair a dhícheanglaíonn an freastalaí bunachar sonraí (:ticket: 21239 agus:ticéad: 21202)

  • Aischéimniú seasta i prefetch_related` a d'fhág go n-áireodh ceist na rudaí gaolmhara ceangal neamhriachtanach (:ticket: 21760).

Ina theannta sin, tá leagan díolta Django de sé, ``django.utils.six ``uasghrádaithe go dtí an eisiúint is déanaí (1.6.1).