Validerare¶
Skriva validatorer¶
En validator är en anropsbar som tar ett värde och skapar ett ValidationError om det inte uppfyller vissa kriterier. Validerare kan vara användbara för att återanvända valideringslogik mellan olika typer av fält.
Här är till exempel en validator som bara tillåter jämna tal:
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
def validate_even(value):
if value % 2 != 0:
raise ValidationError(
_("%(value)s is not an even number"),
params={"value": value},
)
Du kan lägga till detta i ett modellfält via fältets validators argument:
from django.db import models
class MyModel(models.Model):
even_field = models.IntegerField(validators=[validate_even])
Eftersom värden konverteras till Python innan validatorerna körs kan du till och med använda samma validator med formulär:
from django import forms
class MyForm(forms.Form):
even_field = forms.IntegerField(validators=[validate_even])
Du kan också använda en klass med en __call__()-metod för mer komplexa eller konfigurerbara validerare. RegexValidator, till exempel, använder denna teknik. Om en klassbaserad validerare används i modellfältalternativet validators bör du se till att den är serialiserbar av migreringsramverket genom att lägga till deconstruct() och __eq__()-metoder.
Hur validerare körs¶
Se formulärvalidering för mer information om hur validerare körs i formulär, och Validering av objekt för hur de körs i modeller. Observera att validerare inte kommer att köras automatiskt när du sparar en modell, men om du använder en ModelForm, kommer den att köra dina validerare på alla fält som ingår i ditt formulär. Se ModelForm-dokumentationen för information om hur modellvalidering interagerar med formulär.
Inbyggda validerare¶
Modulen django.core.validators innehåller en samling anropsbara validatorer för användning med modell- och formulärfält. De används internt men är tillgängliga för användning med dina egna fält också. De kan användas utöver eller i stället för anpassade field.clean()-metoder.
RegexValidator¶
- class RegexValidator(regex=None, message=None, code=None, inverse_match=None, flags=0)[source]¶
- Parametrar:
regex – Om inte
None, åsidosätterregex. Kan vara en sträng med ett reguljärt uttryck eller ett förkompilerat reguljärt uttryck.message – Om inte
None, åsidosättermessage.code – Om inte
None, åsidosättercode.inverse_match – Om inte
None, åsidosätterinverse_match.flags – Om inte
None, åsidosätterflags. I så fall måsteregexvara en sträng med ett reguljärt uttryck, annars uppstårTypeError.
En
RegexValidatorsöker i det angivnavärdetefter ett givet reguljärt uttryck medre.search(). Som standard uppstår ettValidationErrormedmessageochcodeom en matchning inte hittas. Dess beteende kan inverteras genom att sättainverse_matchtillTrue, i vilket fallValidationErrorutlöses när en matchning finns.- regex¶
Det reguljära uttrycksmönstret som ska sökas efter i det angivna
värdet, medre.search(). Detta kan vara en sträng eller ett förkompilerat reguljärt uttryck skapat medre.compile(). Standardvärdet är den tomma strängen, som kommer att hittas i alla möjligavärden.
- message¶
Det felmeddelande som används av
ValidationErrorom valideringen misslyckas. Standardvärdet är"Ange ett giltigt värde".
- code¶
Den felkod som används av
ValidationErrorom valideringen misslyckas. Standardvärdet är"invalid".
EmailValidator¶
- class EmailValidator(message=None, code=None, allowlist=None)[source]¶
- Parametrar:
En
EmailValidatorsäkerställer att ett värde ser ut som ett e-postmeddelande, och ger upphov till ettValidationErrormedmessageochcodeom det inte gör det. Värden som är längre än 320 tecken betraktas alltid som ogiltiga.- message¶
Det felmeddelande som används av
ValidationErrorom valideringen misslyckas. Standard är"Ange en giltig e-postadress".
- code¶
Den felkod som används av
ValidationErrorom valideringen misslyckas. Standardvärdet är"invalid".
- allowlist¶
Tillåtlista över e-postdomäner. Som standard används ett reguljärt uttryck (attributet
domain_regex) för att validera allt som visas efter tecknet@. Men om den strängen finns med iallowlist, kringgås denna validering. Om den inte anges är standardvärdet förallowlist['localhost']. Andra domäner som inte innehåller en punkt kommer inte att klara valideringen, så du måste lägga till dem iallowlistvid behov.
DomainNameValidator¶
- class DomainNameValidator(accept_idna=True, message=None, code=None)[source]¶
En
RegexValidator-underklass som säkerställer att ett värde ser ut som ett domännamn. Värden som är längre än 255 tecken betraktas alltid som ogiltiga. IP-adresser accepteras inte som giltiga domännamn.Utöver de valfria argumenten i sin överordnade klass
RegexValidatoraccepterarDomainNameValidatorett extra valfritt attribut:- accept_idna¶
Avgör om internationaliserade domännamn ska accepteras, dvs. domännamn som innehåller icke-ASCII-tecken. Standardvärdet är
True.
URLValidator¶
- class URLValidator(schemes=None, regex=None, message=None, code=None)[source]¶
En
RegexValidator-underklass som säkerställer att ett värde ser ut som en URL, och ger felkoden'invalidom det inte gör det. Värden som är längre änmax_lengthtecken betraktas alltid som ogiltiga.Loopback-adresser och reserverade IP-utrymmen betraktas som giltiga. Både bokstavliga IPv6-adresser (RFC 3986 Section 3.2.2) och Unicode-domäner stöds.
Utöver de valfria argumenten i sin överordnade klass
RegexValidatoraccepterarURLValidatorett extra valfritt attribut:- schemes¶
Lista över URL/URI-scheman att validera mot. Om den inte anges är standardlistan
['http', 'https', 'ftp', 'ftps']. Som referens finns på IANA:s webbplats en fullständig lista över giltiga URI-scheman.Varning
Värden som börjar med
file:///kommer inte att godkännas även omfile-schema anges. Giltiga värden måste innehålla en host.
- max_length¶
Den maximala längden på värden som kan anses vara giltiga. Standardvärdet är 2048 tecken.
validera_email¶
- validate_email¶
En
EmailValidator-instans utan några anpassningar.
validera_domännamn¶
- validate_domain_name¶
En
DomainNameValidator-instans utan några anpassningar.
validera_slug¶
- validate_slug¶
En instans av
RegexValidatorsom säkerställer att ett värde endast består av bokstäver, siffror, understreck eller bindestreck.
validera_unicode_slug¶
- validate_unicode_slug¶
En instans av
RegexValidatorsom säkerställer att ett värde endast består av Unicode-bokstäver, siffror, understreck eller bindestreck.
validera_ipv4_adress¶
- validate_ipv4_address[source]¶
En
RegexValidator-instans som säkerställer att ett värde ser ut som en IPv4-adress.
validera_ipv6_adress¶
validera_ipv46_adress¶
validera_kommaseparerad_talslista¶
- validate_comma_separated_integer_list¶
En instans av
RegexValidatorsom säkerställer att ett värde är en kommaseparerad lista med heltal.
int_list_validator¶
- int_list_validator(sep=',', message=None, code='invalid', allow_negative=False)[source]¶
Returnerar en instans av
RegexValidatorsom säkerställer att en sträng består av heltal separerade medsep. Den tillåter negativa heltal närallow_negativeärTrue.
MaxValueValidator¶
- class MaxValueValidator(limit_value, message=None)[source]¶
Utlöser ett
ValidationErrormed koden'max_value'omvalueär större änlimit_value, som kan vara en anropbar.
MinValueValidator¶
- class MinValueValidator(limit_value, message=None)[source]¶
Utlöser ett
ValidationErrormed koden'min_value'omvalueär mindre änlimit_value, som kan vara en anropbar.
MaxLengthValidator¶
- class MaxLengthValidator(limit_value, message=None)[source]¶
Utlöser ett
ValidationErrormed koden'max_length'om längden påvalueär större änlimit_value, som kan vara en anropbar.
MinLengthValidator¶
- class MinLengthValidator(limit_value, message=None)[source]¶
Utlöser ett
ValidationErrormed koden'min_length'om längden påvalueär mindre änlimit_value, som kan vara en anropbar.
DecimalValidator¶
- class DecimalValidator(max_digits, decimal_places)[source]¶
Utlöser
ValidationErrormed följande koder:'max_digits'om antalet siffror är större änmax_digits.'max_decimal_places'om antalet decimaler är större ändecimal_places.'max_whole_digits'om antalet hela siffror är större än skillnaden mellanmax_digitsochdecimal_places.
FileExtensionValidator¶
- class FileExtensionValidator(allowed_extensions, message, code)[source]¶
Utlöser ett
ValidationErrormed koden'invalid_extension'om tillägget tillvalue.name(valueär enFile) inte finns iallowed_extensions. Tillägget jämförs fall-insensitivt medallowed_extensions.Varning
Förlita dig inte på validering av filtillägget för att avgöra en fils typ. Filer kan döpas om så att de får vilket filnamnstillägg som helst, oavsett vilka data de innehåller.
validera_bild_fil_utvidgning¶
- validate_image_file_extension[source]¶
Använder Pillow för att säkerställa att
value.name(valueär enFile) har ett giltigt bildtillägg.
ProhibitNullCharactersValidator¶
- class ProhibitNullCharactersValidator(message=None, code=None)[source]¶
Utlöser ett
ValidationErroromstr(value)innehåller ett eller flera nolltecken ('\x00').- message¶
Det felmeddelande som används av
ValidationErrorom valideringen misslyckas. Standard är"Null-tecken är inte tillåtna.".
- code¶
Den felkod som används av
ValidationErrorom valideringen misslyckas. Standardvärdet är"null_characters_not_allowed".
StepValueValidator¶
- class StepValueValidator(limit_value, message=None, offset=None)[source]¶
Utlöser ett
ValidationErrormed koden'step_size'omvalueinte är en integrerad multipel avlimit_value, som kan vara ett flottör-, heltal- eller decimalvärde eller en callable. Näroffsetär inställt sker valideringen motlimit_valueplusoffset. Till exempel:, förStepValueValidator(3, offset=1.4)inkluderar giltiga värden1.4,4.4,7.4,10.4, och så vidare.