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 :doc:``formulärvalidering </ref/forms/validation>` för mer information om hur validerare körs i formulär, och :ref:``Validering av objekt <validating-objects>` 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åsteregex
vara en sträng med ett reguljärt uttryck, annars uppstårTypeError
.
En
RegexValidator
söker i det angivnavärdet
efter ett givet reguljärt uttryck medre.search()
. Som standard uppstår ettValidationError
medmessage
ochcode
om en matchning inte hittas. Dess beteende kan inverteras genom att sättainverse_match
tillTrue
, i vilket fallValidationError
utlö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
ValidationError
om valideringen misslyckas. Standardvärdet är"Ange ett giltigt värde"
.
- code¶
Den felkod som används av
ValidationError
om valideringen misslyckas. Standardvärdet är"invalid"
.
EmailValidator
¶
- class EmailValidator(message=None, code=None, allowlist=None)[source]¶
- Parametrar:
En
EmailValidator
säkerställer att ett värde ser ut som ett e-postmeddelande, och ger upphov till ettValidationError
medmessage
ochcode
om 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
ValidationError
om valideringen misslyckas. Standard är"Ange en giltig e-postadress"
.
- code¶
Den felkod som används av
ValidationError
om 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 iallowlist
vid 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
RegexValidator
accepterarDomainNameValidator
ett 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'invalid
om det inte gör det. Värden som är längre änmax_length
tecken 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
RegexValidator
accepterarURLValidator
ett 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
RegexValidator
som 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
RegexValidator
som 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
RegexValidator
som 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
RegexValidator
som 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
ValidationError
med 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
ValidationError
med koden'min_value'
omvalue
är mindre änlimit_value
, som kan vara en anropbar.
MaxLengthValidator
¶
- class MaxLengthValidator(limit_value, message=None)[source]¶
Utlöser ett
ValidationError
med 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
ValidationError
med 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
ValidationError
med 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_digits
ochdecimal_places
.
FileExtensionValidator
¶
- class FileExtensionValidator(allowed_extensions, message, code)[source]¶
Utlöser ett
ValidationError
med 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
ValidationError
omstr(value)
innehåller ett eller flera nolltecken ('\x00'
).- message¶
Det felmeddelande som används av
ValidationError
om valideringen misslyckas. Standard är"Null-tecken är inte tillåtna."
.
- code¶
Den felkod som används av
ValidationError
om valideringen misslyckas. Standardvärdet är"null_characters_not_allowed"
.
StepValueValidator
¶
- class StepValueValidator(limit_value, message=None, offset=None)[source]¶
Utlöser ett
ValidationError
med koden'step_size'
omvalue
inte ä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_value
plusoffset
. Till exempel:, förStepValueValidator(3, offset=1.4)
inkluderar giltiga värden1.4
,4.4
,7.4
,10.4
, och så vidare.