Django 1.11 versionsinformation¶
4 april 2017
Välkommen till Django 1.11!
Dessa versionsinformation täcker nya funktioner, samt några bakåtkompatibla ändringar som du bör vara medveten om när du uppgraderar från Django 1.10 eller äldre versioner. Vi har börjat utfasningsprocessen för vissa funktioner.
Se guiden Så här uppgraderar du Django till en nyare version om du ska uppdatera ett befintligt projekt.
Django 1.11 betecknas som en long-term support release. Den kommer att få säkerhetsuppdateringar i minst tre år efter att den släppts. Stöd för den tidigare LTS, Django 1.8, kommer att upphöra i april 2018.
Kompatibilitet med Python¶
Django 1.11 kräver Python 2.7, 3.4, 3.5, 3.6 eller 3.7 (från och med 1.11.17). Vi rekommenderar starkt och stöder endast officiellt den senaste utgåvan av varje serie.
Django 1.11.x-serien är den sista som stöder Python 2. Nästa stora version, Django 2.0, kommer endast att stödja Python 3.4+.
Föråldrade varningar är inte längre högljudda som standard¶
Till skillnad från äldre versioner av Django visas inte längre Djangos egna deprecation-varningar som standard. Detta överensstämmer med Pythons standardbeteende.
Denna ändring gör det möjligt för tredjepartsappar att stödja både Django 1.11 LTS och Django 1.8 LTS utan att behöva lägga till kod för att undvika varningar om utfasning.
Efter lanseringen av Django 2.0 föreslår vi att tredjepartsappförfattare släpper stödet för alla versioner av Django före 1.11. Vid den tiden bör du kunna köra ditt pakets tester med python -Wd så att varningar om avskrivningar visas. Efter att du har åtgärdat varningarna för utfasning bör din app vara kompatibel med Django 2.0.
Vad är nytt i Django 1.11¶
Klassbaserade modellindex¶
Den nya modulen django.db.models.indexes innehåller klasser som underlättar skapandet av databasindex. Index läggs till i modeller med hjälp av alternativet Meta.indexes.
Klassen Index skapar ett b-tree index, som om du använt db_index på modellfältet eller index_together på modellens Meta klass. Den kan underklassificeras för att stödja olika indextyper, till exempel GinIndex. Det gör det också möjligt att definiera ordningen (ASC/DESC) för kolumnerna i indexet.
Template-baserad widget-rendering¶
För att underlätta anpassningen av widgetar görs renderingen av formulärwidgetar nu med hjälp av mallsystemet i stället för i Python. Se API för rendering av formulär.
Du kan behöva justera eventuella anpassade widgetar som du har skrivit för några bakåtkompatibla ändringar.
uttryck för Subquery¶
De nya databasuttrycken Subquery och Exists gör det möjligt att skapa explicita underfrågor. Underfrågor kan hänvisa till fält från den yttre frågeuppsättningen med hjälp av klassen OuterRef.
Mindre funktioner¶
django.contrib.admin¶
ModelAdmin.date_hierarchykan nu referera till fält över relationer.Den nya
ModelAdmin.get_exclude()-hook gör det möjligt att ange de uteslutna fälten baserat på begäran eller modellinstansen.Mallen
popup_response.htmlkan nu åsidosättas per app, per modell eller genom att ställa in attributetModelAdmin.popup_response_template.
django.contrib.auth¶
Standardantalet iterationer för PBKDF2-lösenordshasher ökas med 20%.
De klassbaserade vyerna
LoginViewochLogoutViewersätter de föråldrade funktionsbaserade vyernalogin()ochlogout().Klasserna
PasswordChangeView,PasswordChangeDoneView,PasswordResetView,PasswordResetDoneView,PasswordResetConfirmViewochPasswordResetCompleteViewklassbaserade vyer ersätter de föråldrade funktionsbaserade vyernapassword_change(),password_change_done(),password_reset(),password_reset_done(),password_reset_confirm()ochpassword_reset_complete().Det nya attributet
post_reset_loginförPasswordResetConfirmViewgör det möjligt att automatiskt logga in en användare efter en lyckad lösenordsåterställning. Om du har konfigurerat fleraAUTHENTICATION_BACKENDS, använd attributetpost_reset_login_backendför att välja vilken som ska användas.För att undvika möjligheten att läcka en token för återställning av lösenord via HTTP Referer-headern (till exempel om återställningssidan innehåller en referens till CSS eller JavaScript som finns på en annan domän), lagrar
PasswordResetConfirmView(men inte den föråldradepassword_reset_confirm()funktionsbaserade vyn) token i en session och omdirigerar till sig själv för att presentera lösenordsändringsformuläret för användaren utan token i URL.update_session_auth_hash()roterar nu sessionsnyckeln för att tillåta en lösenordsändring för att ogiltigförklara stulna sessionskakor.Det nya attributet
success_url_allowed_hostsförLoginViewochLogoutViewgör det möjligt att ange en uppsättning värdar som är säkra för omdirigering efter inloggning och utloggning.Lagt till lösenordsvaliderare
help_textiUserCreationForm.HttpRequestskickas nu tillauthenticate`()som i sin tur skickar det till autentiseringsbackend om det accepterar ettrequestargument.Signalen
user_login_failed()får nu ettrequestargument.PasswordResetFormstöder anpassade användarmodeller som använder ett e-postfält som heter något annat än'email'. Ställ inCustomUser.EMAIL_FIELDtill namnet på fältet.get_user_model()kan nu anropas vid importtillfället, även i moduler som definierar modeller.
django.contrib.contenttypes¶
När inaktuella innehållstyper upptäcks i kommandot
remove_stale_contenttypes, finns det nu en lista över relaterade objekt somauth.Permissionsom också kommer att raderas. Tidigare listades endast innehållstyperna (och den här prompten fanns eftermigratei stället för i ett separat kommando).
django.contrib.gis¶
De nya metoderna
GEOSGeometry.from_gml()ochOGRGeometry.from_gml()gör det möjligt att skapa geometrier från GML.Lagt till stöd för
dwithinlookup på SpatiaLite.Funktionerna
Area,Distanceoch avståndsuppslagningar fungerar nu med geodetiska koordinater på SpatiaLite.De OpenLayers-baserade formulärwidgetarna använder nu
OpenLayers.jsfrånhttps://cdnjs.cloudflare.com, vilket är mer lämpligt för produktionsanvändning än den gamla källanhttps://openlayers.org/. De är också uppdaterade för att använda OpenLayers 3.PostGIS-migreringar kan nu ändra fältdimensioner.
Lagt till möjligheten att skicka parametrarna
size,shapeochoffsetnär du skaparGDALRaster-objekt.Lagt till SpatiaLite-stöd för
IsValid-funktionen,MakeValid-funktionen ochisvalidlookup.Lagt till Oracle-stöd för funktionen
AsGML,BoundingCircle,IsValidochisvalid.
django.contrib.postgres¶
Det nya argumentet
distinctförStringAggavgör om sammanlänkade värden ska vara distinkta.De nya klasserna
GinIndexochBrinIndexgör det möjligt att skapaGINochBRINindex i databasen.django.contrib.postgres.fields.JSONFieldaccepterar en nyencoderparameter för att ange en anpassad klass för att koda datatyper som inte stöds av standardkodaren.Den nya
CITextmixin ochCITextExtensionmigration operation tillåter användning av PostgreSQLcitextförlängning för skiftlägesokänsliga uppslagningar. Tre fält tillhandahålls:CICharField,CIEmailFieldochCITextField.Den nya
JSONBAggtillåter aggregering av värden som en JSON-array.HStoreField(modellfält) ochHStoreField(formulärfält) tillåter lagring av nollvärden.
Cache¶
Memcached-backends skickar nu innehållet i
OPTIONSsom nyckelordsargument till klientkonstruktörerna, vilket möjliggör mer avancerad kontroll av klientbeteendet. Se cache arguments dokumentation för exempel.Memcached-backends tillåter nu att flera servrar definieras som en kommaseparerad sträng i
LOCATION, för att underlätta för tredjepartstjänster som använder sådana strängar i miljövariabler.
CSRF¶
Lagt till inställningen
CSRF_USE_SESSIONSför att tillåta lagring av CSRF-token i användarens session i stället för i en cookie.
Databas backends¶
Added the
skip_lockedargument toQuerySet.select_for_update()on PostgreSQL 9.5+ and Oracle to execute queries withFOR UPDATE SKIP LOCKED.Lade till inställningen
TEST['TEMPLATE']för att låta PostgreSQL-användare ange en mall för att skapa testdatabasen.QuerySet.iterator()now uses server-side cursors on PostgreSQL. This feature transfers some of the worker memory load (used to hold query results) to the database and might increase database memory usage.Lagt till MySQL-stöd för alternativet
'isolation_level'iOPTIONSför att göra det möjligt att ange transaktionens isoleringsnivå. För att undvika eventuell dataförlust rekommenderas att du byter från MySQL:s standardnivå, repeterbar läsning, till read committed.Lagt till stöd för
cx_Oracle5.3.
E-postadress¶
Lagt till inställningen
EMAIL_USE_LOCALTIMEför att tillåta att SMTP-datohuvuden skickas i den lokala tidszonen i stället för UTC.EmailMessage.attach()ochattach_file()faller nu tillbaka till MIME-typen application/octet-stream när binärt innehåll som inte kan avkodas som UTF-8 anges för en text/*-bilaga.
Fil delning¶
För att göra den omslutningsbar av
io.TextIOWrapper, harFilenu metodernareadable(),writable()ochseekable().
Formulär¶
Det nya attributet
empty_valuepåCharField,EmailField,RegexField,SlugFieldochURLFieldgör det möjligt att ange Python-värdet som ska användas för att representera ”empty”.Den nya
Form.get_initial_for_field()-metoden returnerar initialdata för ett formulärfält.
Internationalisering¶
Nummerformatering och inställningen
NUMBER_GROUPINGstöder icke-enhetlig siffergruppering.
Kommandon för hantering¶
Det nya alternativet
loaddata --excludegör det möjligt att utesluta modeller och appar när data laddas från fixturer.Det nya alternativet
diffsettings --defaultgör det möjligt att ange en annan inställningsmodul än Djangos standardinställningar att jämföra mot.argumenten i
app_labelbegränsar nu utdata förshowmigrations --plan.
Migreringar¶
Lagt till stöd för serialisering av
uuid.UUID-objekt.
Modeller¶
Lagt till stöd för anropbara värden i argumentet
defaultsiQuerySet.update_or_create()ochget_or_create`().ImageFieldnow has a defaultvalidate_image_file_extensionvalidator. (This validator moved to the form field in Django 1.11.2.)Lagt till stöd för tidstrunkering i
Trunc-funktioner.Lade till funktionen
ExtractWeekför att extrahera veckan frånDateFieldochDateTimeFieldoch exponerade den genomweeklookup.Lade till funktionen
TruncTimeför att trunkeraDateTimeFieldtill dess tidskomponent och exponerade den genomtimelookup.Lagt till stöd för uttryck i
QuerySet.values()ochvalues_list().Lagt till stöd för frågeuttryck på uppslagningar som tar flera argument, t.ex.
range.Du kan nu använda alternativet
unique=TruemedFileField.Lade till parametrarna
nulls_firstochnulls_lasttillExpression.asc()ochdesc()för att styra ordningsföljden för null-värden.De nya
F-uttryckenbitleftshift()ochbitrightshift()tillåter bitvisa skiftoperationer.Lagt till
QuerySet.union(),intersection()ochdifference().
Förfrågningar och svar¶
Lagt till
QueryDict.fromkeys().CommonMiddlewareställer nu in svarshuvudetContent-Lengthför svar som inte strömmas.Inställningen
SECURE_HSTS_PRELOADlades till för att tillåta att direktivetpreloadläggs till i rubrikenStrict-Transport-Security.ConditionalGetMiddlewarelägger nu till rubrikenETagi svaren.
Serialisering¶
Det nya attributet
django.core.serializers.base.Serializer.stream_classgör det möjligt för underklasser att anpassa standardströmmen.Den kodare som används av JSON serializer kan nu anpassas genom att skicka ett
clsnyckelordsargument till funktionenserializers.serialize().DjangoJSONEncoderserialiserar nutimedelta-objekt (används avDurationField).
Mallar¶
mark_safe()kan nu användas som dekorator.Mallbackend
Jinja2stöder nu kontextprocessorer genom att ställa in alternativet'context_processors'iOPTIONS.Taggen
regroupreturnerar nunamedtupleistället för ordböcker så att du kan packa upp gruppobjektet direkt i en loop, t.ex.{% for grouper, list in regrouped %}.Lagt till en
resetcycle-malltagg för att göra det möjligt att återställa sekvensen förcycle-malltaggen.Du kan nu ange specifika kataloger för en viss
filesystem.Loader <django.template.loaders.filesystem.Loader>`.
Tester¶
Added
DiscoverRunner.get_test_runner_kwargs()to allow customizing the keyword arguments passed to the test runner.Lagt till alternativet
test --debug-modeför att underlätta felsökning av testfel genom att sätta inställningenDEBUGtillTrue.De nya funktionerna
django.test.utils.setup_databases()(flyttad fråndjango.test.runner) ochteardown_databases()gör det enklare att bygga egna testrunners.Lagt till stöd för
unittest.TestCase.subTest()’s vid användning avtest --parallel.DiscoverRunnerkör nu systemkontrollerna i början av en testkörning. Åsidosätt metodenDiscoverRunner.run_checks()om du vill inaktivera detta.
Validerare¶
Lagt till
FileExtensionValidatorför att validera filtillägg ochvalidate_image_file_extensionför att validera bildfiler.
Bakåtkompatibla ändringar i 1.11¶
django.contrib.gis¶
För att förenkla kodbasen och för att det är lättare att installera än när
contrib.gisförst släpptes, är GDAL nu ett obligatoriskt beroende för GeoDjango. I äldre versioner krävs det endast för SQLite.contrib.gis.mapstas bort eftersom det har ett gränssnitt mot en pensionerad version av Google Maps API och verkar vara ounderhållet. Om du använder det, :ticket:` låt oss veta <14284>`.Jämlikhetsoperatorn
GEOSGeometryjämför nu även SRID.De OpenLayers-baserade formulärwidgetarna använder nu OpenLayers 3, och mallarna
gis/openlayers.htmlochgis/openlayers-osm.htmlhar uppdaterats. Kontrollera ditt projekt om du underklassar dessa widgetar eller utökar mallarna. De nya widgetarna fungerar också lite annorlunda än de gamla. Istället för att använda ett verktygsfält i widgeten klickar du för att rita, klickar och drar för att flytta kartan och klickar och drar en punkt/vertex/hörn för att flytta den.Stöd för SpatiaLite < 4.0 har tagits bort.
Stöd för GDAL 1.7 och 1.8 har tagits bort.
Widgetarna i
contrib.gis.forms.widgetsoch adminsOpenLayersWidgetanvänder form rendering API snarare änloader.render_to_string(). Om du använder en anpassad widgetmall måste du se till att din formulärrenderare kan hitta den. Du kan till exempel användaTemplatesSettingrenderer.
django.contrib.staticfiles¶
collectstatickan nu misslyckas under efterbehandlingen när du använder en hashad lagring av statiska filer om det finns en referensloop (t.ex.'foo.css'refererar till'bar.css'som i sin tur refererar till'foo.css') eller om kedjan av filer som refererar till andra filer är för djup för att lösas i flera omgångar. I det senare fallet ökar du antalet passeringar medManifestStaticFilesStorage.max_post_process_passes.När
ManifestStaticFilesStorageanvänds, ger statiska filer som inte finns i manifestet vid körning nu upphov till ettValueErroristället för att returnera en oförändrad sökväg. Du kan återgå till det gamla beteendet genom att ställa inManifestStaticFilesStorage.manifest_stricttillFalse.
Databas backend API¶
I det här avsnittet beskrivs ändringar som kan behövas i tredjeparts databasbackends.
Metoden
DatabaseOperations.time_trunc_sql()har lagts till för att stödja trunkering avTimeField. Den accepterar argumentenlookup_typeochfield_nameoch returnerar lämplig SQL för att trunkera det angivna tidsfältetfield_nametill ett tidsobjekt med endast den angivna specificiteten. Argumentetlookup_typekan vara antingen'hour','minute'eller'second'.Metoden
DatabaseOperations.datetime_cast_time_sql()har lagts till för att stödjatimelookup. Den accepterar argumentenfield_nameochtznameoch returnerar den SQL som krävs för att casta ett datetime-värde till ett tidsvärde.För att aktivera stöd för
FOR UPDATE SKIP LOCKED, ställ inDatabaseFeatures.has_select_for_update_skip_locked = True.Det nya attributet
DatabaseFeatures.supports_index_column_orderinganger om en databas tillåter att man definierar ordningsföljd för kolumner i index. Standardvärdet ärTrueoch metodenDatabaseIntrospection.get_constraints()bör innehålla en'orders'-nyckel i var och en av de returnerade ordböckerna med en lista över'ASC'och/eller'DESC'-värden som motsvarar ordningen för varje kolumn i indexet.inspectdbanropar inte längreDatabaseIntrospection.get_indexes()som är föråldrad. Anpassade databasbackends bör säkerställa att alla typer av index returneras avDatabaseIntrospection.get_constraints().Döpte om funktionen
ignores_quoted_identifier_casetillignores_table_name_caseför att mer exakt återspegla hur den används.Nyckelordsargumentet
nameläggs till i metodenDatabaseWrapper.create_cursor(self, name=None)för att tillåta användning av markörer på serversidan på backends som stöder det.
Slopat stöd för PostgreSQL 9.2 och PostGIS 2.0¶
Uppströmsstöd för PostgreSQL 9.2 slutar i september 2017. Som en följd av detta ställer Django 1.11 PostgreSQL 9.3 som den minsta version som den officiellt stöder.
Stöd för PostGIS 2.0 tas också bort eftersom PostgreSQL 9.2 är den sista versionen som stöder den.
Dessutom har den minsta versionen av psycopg2 som stöds ökats från 2.4.5 till 2.5.4.
LiveServerTestCase binder till port noll¶
Istället för att ta ett portintervall och iterera för att hitta en ledig port, binder LiveServerTestCase till port noll och förlitar sig på att operativsystemet tilldelar en ledig port. Miljövariabeln DJANGO_LIVE_TEST_SERVER_ADDRESS används inte längre, och eftersom den inte heller används längre, tas alternativet manage.py test --liveserver bort.
Om du behöver binda LiveServerTestCase till en specifik port, använd attributet port som lades till i Django 1.11.2.
Skydd mot osäkra omdirigeringar i django.contrib.auth och i18n-vyer¶
LoginView, LogoutView (och de föråldrade funktionsbaserade motsvarigheterna) och set_language() skyddar användare från att omdirigeras till icke-HTTPS next URL:er när appen körs över HTTPS.
QuerySet.get_or_create() och update_or_create() validerar argument¶
För att förhindra att typfel passerar tyst kontrollerar get_or_create() och update_or_create() att deras argument är modellfält. Detta bör vara bakåtkompatibelt endast i det faktum att det kan avslöja en bugg i ditt projekt.
pytz är ett obligatoriskt beroende och stöd för settings.TIME_ZONE = None har tagits bort¶
För att förenkla Djangos hantering av tidszoner är pytz nu ett nödvändigt beroende. Det installeras automatiskt tillsammans med Django.
Stöd för settings.TIME_ZONE = None tas bort eftersom beteendet inte används ofta och är tveksamt användbart. Om du automatiskt vill upptäcka tidszonen baserat på systemets tidszon kan du använda tzlocal:
from tzlocal import get_localzone
TIME_ZONE = get_localzone().zone
Detta fungerar på liknande sätt som settings.TIME_ZONE = None förutom att det också ställer in os.environ['TZ']. låt oss veta <https://groups.google.com/g/django-developers/c/OAV3FChfuPM/discussion>`__ om det finns ett användningsfall där du upptäcker att du inte kan anpassa din kod för att ställa in en TIME_ZONE.
HTML-ändringar i admin-mallar¶
<p class="help"> ersätts med en <div> tagg för att göra det möjligt att inkludera listor i hjälptexten.
Skrivskyddade fält omsluts av .<div class="readonly">.</div>. istället för .<p>.</p>. för att tillåta alla typer av HTML som innehåll i fältet.
Ändringar till följd av införandet av mallbaserad widgetrendering¶
Vissa odokumenterade klasser i django.forms.widgets har tagits bort:
SubWidgetRendererMixin,ChoiceFieldRenderer,RadioFieldRenderer,CheckboxFieldRendererChoiceInput,RadioChoiceInput,CheckboxChoiceInput
Den odokumenterade metoden Select.render_option() har tagits bort.
Metoden Widget.format_output() har tagits bort. Använd en anpassad widgetmall istället.
Vissa widgetvärden, till exempel alternativen <select>, är nu lokaliserade om settings.USE_L10N=True. Du kan återgå till det gamla beteendet med anpassade widgetmallar som använder localize-malltaggen för att stänga av lokalisering.
django.template.backends.django.Template.render() förbjuder icke-dict sammanhang¶
För kompatibilitet med flera mallmotorer måste django.template.backends.django.Template.render() (returneras från högnivå API:er för mallladdare som loader.get_template()) ta emot en ordbok av kontext snarare än Context eller RequestContext. Om du skulle skicka någon av de två klasserna, skicka en ordbok istället - att göra det är bakåtkompatibelt med äldre versioner av Django.
Modellera tillståndsändringar i migreringsoperationer¶
För att göra migreringar snabbare fördröjs rendering av relaterade modeller tills en åtgärd som behöver dem (t.ex. RunPython). Om du har en anpassad operation som arbetar med modellklasser eller modellinstanser från argumentet from_state i database_forwards() eller database_backwards(), måste du rendera modelltillstånd med metoden clear_delayed_apps_cache() enligt beskrivningen i writing your own migration operation.
Markörer på serversidan på PostgreSQL¶
The change to make QuerySet.iterator() use server-side cursors on
PostgreSQL prevents running Django with PgBouncer in transaction pooling mode.
To reallow that, use the DISABLE_SERVER_SIDE_CURSORS setting (added in Django 1.11.1) in
DATABASES.
Se Transaktionspoolning och cursorer på serversidan för mer information.
Diverse¶
Om inga objekt i flödet har attributen
pubdateellerupdateddatereturnerarSyndicationFeed.latest_post_date()nu aktuellt UTC-datum/tid istället för en datetime utan information om tidszon.CSRF-misslyckanden loggas i
django.security.csrf-loggern istället fördjango.request.valideringen av
ALLOWED_HOSTSär inte längre inaktiverad när tester körs. Om ditt program innehåller tester med anpassade värdnamn måste du inkludera dessa värdnamn iALLOWED_HOSTS. Se Tester och flera värdnamn.Om du använder en främmande nyckels ID (t.ex.
'field_id') iModelAdmin.list_displayvisas det relaterade objektets ID. Ta bort suffixet_idom du vill ha det gamla beteendet för strängrepresentationen av objektet.I modellformulär sparar
CharFieldmednull=TruenuNULLför tomma värden istället för tomma strängar.På Oracle kontrollerar
Model.validate_unique()inte längre tomma strängar för unikhet eftersom databasen tolkar värdet somNULL.Om du underklassar
AbstractUseroch åsidosätterclean(), se till att den anroparsuper().BaseUserManager.normalize_email()anropas i en nyAbstractUser.clean()-metod så att normalisering tillämpas i fall som validering av modellformulär.EmailFieldochURLFieldaccepterar inte längre nyckelordsargumentetstrip. Ta bort det eftersom det inte har någon effekt i äldre versioner av Django eftersom dessa fält alltid tar bort blanksteg.Attributen
checkedochselectedsom återges av formulärwidgets använder nu HTML5:s booleska syntax i stället för XHTML:schecked='checked'ochselected='selected'.RelatedManager.add(),remove(),clear(), ochset()rensar nuprefetch_related()-cachen.För att förhindra eventuell förlust av sparade inställningar ger
setup_test_environment()nu upphov till ett undantag om den anropas en andra gång innanteardown_test_environment()anropas.Det odokumenterade aliaset
DateTimeAwareJSONEncoderförDjangoJSONEncoder(bytt namn i Django 1.0) tas bort.cached template loaderär nu aktiverad omOPTIONS['loaders']inte är specificerad ochOPTIONS['debug']ärFalse(det senare alternativet är standardvärdet förDEBUG). Detta kan vara bakåtkompatibelt om du har några template-taggar som inte är trådsäkra.Prompten för borttagning av inaktuella innehållstyper visas inte längre efter att kommandot
migratehar körts. Använd det nya kommandotremove_stale_contenttypesistället.Administratörens widget för
IntegerFieldanvändertype="number"i stället förtype="text".Villkorliga HTTP-rubriker analyseras och jämförs nu i enlighet med RFC 7232 Conditional Requests-specifikationen i stället för den äldre RFC 2616.
patch_response_headers()lägger inte längre till enLast-Modifiedheader. Enligt RFC 7234 Section 4.2.2 är denna rubrik värdelös tillsammans med andra cache-rubriker som ger en explicit utgångstid, t.ex.ExpiresellerCache-Control.UpdateCacheMiddlewareochadd_never_cache_headers()anroparpatch_response_headers()och påverkas därför också av denna ändring.I adminmallarna ersätts
<p class="help">med en<div>tagg för att möjliggöra inkludering av listor i hjälptexten.ConditionalGetMiddlewareanger inte längre rubrikenDateeftersom webbservrar anger den rubriken. Den ställer inte heller längre in rubrikenContent-Lengtheftersom detta nu görs avCommonMiddleware.Om du har ett mellanprogram som ändrar innehållet i ett svar och som visas före
CommonMiddlewarei inställningarnaMIDDLEWAREellerMIDDLEWARE_CLASSESmåste du ändra ordningen på mellanprogrammet så att svaren inte ändras efter attContent-Lengthhar angetts, eller låta det mellanprogram som ändrar svaret återställa rubrikenContent-Length.get_model()ochget_models()ger nu upphov tillAppRegistryNotReadyom de anropas innan modeller för alla applikationer har laddats. Tidigare krävde de bara att målapplikationens modeller skulle laddas och kunde därför returnera modeller utan att alla deras relationer var inställda. Om du behöver det gamla beteendet hosget_model(), sätt argumentetrequire_readytillFalse.Det oanvända attributet
BaseCommand.can_import_settingshar tagits bort.Den odokumenterade
django.utils.functional.lazy_propertytas bort.För konsekvens med icke-multipart-förfrågningar,
MultiPartParser.parse()lämnar nurequest.POSToföränderlig. Om du ändrar denQueryDict, måste du nu först kopiera den, t.ex.request.POST.copy().Stöd för
cx_Oracle< 5.2 har tagits bort.Stöd för IPython < 1.0 har tagits bort från kommandot
shell.Signaturen för det privata API:et
Widget.build_attrs()ändrades frånextra_attrs=None, **kwargstillbase_attrs, extra_attrs=None.Filliknande objekt (t.ex.
StringIOochBytesIO) som laddas upp till enImageFieldmed hjälp av testklienten kräver nu ettname-attribut med ett värde som passerarvalidate_image_file_extension-validatorn. Se anmärkningen iClient.post().FileFieldflyttar nu snarare än kopierar den fil den tar emot. Med standardinställningarna för filuppladdning har filer som är större änFILE_UPLOAD_MAX_MEMORY_SIZEnu samma behörigheter som temporära filer (ofta0o600) i stället för systemets standard-umask (ofta0o6644). AngeFILE_UPLOAD_PERMISSIONSom du vill ha samma behörighet oavsett filstorlek.
Funktioner som inte längre är aktuella i 1.11¶
modeller.permalink() dekorator¶
Använd django.urls.reverse() istället. Till exempel:
from django.db import models
class MyModel(models.Model):
...
@models.permalink
def url(self):
return ("guitarist_detail", [self.slug])
blir:
from django.db import models
from django.urls import reverse
class MyModel(models.Model):
...
def url(self):
return reverse("guitarist_detail", args=[self.slug])
Diverse¶
contrib.auth’s funktionsbaserade vyerlogin()ochlogout()är avförda till förmån för nya klassbaserade vyerLoginViewochLogoutView.Den oanvända parametern
extra_contexticontrib.auth.views.logout_then_login()är föråldrad.contrib.auth:s funktionsbaserade vyerpassword_change(),password_change_done(),password_reset(),password_reset_done(),password_reset_confirm()ochpassword_reset_complete()är föråldrade till förmån för nya klassbaserade vyerPasswordChangeView,PasswordChangeDoneView,PasswordResetView,PasswordResetDoneView,PasswordResetConfirmView, ochPasswordResetCompleteView.django.test.runner.setup_databases()flyttas tilldjango.test.utils.setup_databases(). Den gamla platsen är föråldrad.django.utils.translation.string_concat()är föråldrad till förmån fördjango.utils.text.format_lazy().string_concat(*strings)kan ersättas avformat_lazy('{}' * len(strings), *strings).För cache-backend
PyLibMCCacheär det föråldrat att skickapylibmcbeteendeinställningar som toppnivåattribut förOPTIONS. Ställ in dem under enbehaviorsnyckel inomOPTIONSistället.Parametern
hostidjango.utils.http.is_safe_url()är föråldrad till förmån för den nya parameternallowed_hosts.Att tysta undantag som uppstår vid rendering av
{% include %}malltagg är avskriven eftersom beteendet ofta är mer förvirrande än hjälpsamt. I Django 2.1 kommer undantaget att tas upp.DatabaseIntrospection.get_indexes()är föråldrad till förmån förDatabaseIntrospection.get_constraints().authenticate()skickar nu ettrequest-argument tillauthenticate()-metoden för autentiseringsbackends. Stöd för metoder som inte accepterarrequestsom det första positionella argumentet kommer att tas bort i Django 2.1.Inställningen
USE_ETAGSär utfasad till förmån förConditionalGetMiddleware`som nu lägger tillETag-rubriken till svar oavsett inställning.CommonMiddlewareochdjango.utils.cache.patch_response_headers()kommer inte längre att ställa in ETags när föråldringen upphör.Model._meta.has_auto_fieldär föråldrad till förmån för att kontrollera omModel._meta.auto_field is not None.Att använda grupper av reguljära uttryck med
iLmsu#iurl()är föråldrat. Den enda gruppen som är användbar är(?i)för skiftlägesokänsliga webbadresser, men skiftlägesokänsliga webbadresser är inte en bra praxis eftersom de skapar flera poster för sökmotorer, till exempel. En alternativ lösning kan vara att skapa enhandler404som letar efter versaler i URL:en och omdirigerar till en motsvarighet med gemener.Argumentet
rendererläggs till i metodenWidget.render(). Metoder som inte accepterar det argumentet kommer att fungera under en utfasningsperiod.