Validateur

Mary-Kate Olsen
Libérer: 2024-11-18 06:43:01
original
114 Les gens l'ont consulté

Validateur

Les validations sont une méthode permettant de garantir que nos bases de données reçoivent uniquement le type d'informations approprié pour chaque attribut. Après tout, nous ne voudrions pas qu’un type de données surprise se retrouve dans notre code et provoque un comportement inattendu. Heureusement, SQLAlchemy dispose d'un package qui rend les validations rapides et faciles !

Regardons quelques exemples simples. Imaginez que nous avons un modèle simple, Sandwich. Ici, nous avons déjà initialisé notre base de données et l'importons à partir d'un fichier de configuration.

from config import db

class Sandwich(db.Model):
    __tablename__ = 'sandwiches'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)
    description = db.Column(db.String)
    price = db.Column(db.Float)
Copier après la connexion

Si nous souhaitons ajouter des validations à l'un de ces attributs, nous devrons d'abord importer le package de validations.

à partir de l'importation sqlalchemy.orm valide

Et puis, écrivez notre fonction avec le décorateur '@validates' à l'intérieur du modèle.

    @validates('name')
    def validate_name(self, key, value):
        if not value:
            raise ValueError('Name cannot be empty.')
        if type(value) != str:
            raise ValueError('Name must be a string.')
        return value
Copier après la connexion

Alors, que se passe-t-il ici ? Décomposons-le. Le @validates est un décorateur qui permet à notre ORM de transmettre toutes les valeurs reçues avec la clé 'name' via notre fonction de validation avant de les ajouter à la base de données. La valeur que nous renvoyons est celle qui est finalement donnée à notre base de données. L'argument "clé" est la clé qui est évaluée, dans ce cas "nom", la valeur est la valeur de cette clé, donc le nom réel (espérons-le en texte) que nous essayons d'ajouter. Nous vérifions donc ici que l'attribut name transmis n'est pas vide et qu'il s'agit en fait d'une chaîne. Sinon, nous générons une erreur.

Nous pouvons également exécuter plusieurs attributs via le même décorateur en les ajoutant à ses arguments.

    @validates('name', 'description')
    def validate_text(self, key, value):
        if not value:
            raise ValueError(f'{key} cannot be empty.')
        if type(value) != str:
            raise ValueError(f'{key} must be a string.')
        return value
Copier après la connexion

Cette fonction valide nos attributs de nom et de description, mais nous n'aurons généralement pas les mêmes validations à effectuer sur différents attributs. En fonction des différences et du nombre de validations dont nous disposons, nous pouvons procéder de différentes manières. Nous pouvons exécuter un validateur distinct pour nos autres attributs, ajoutons également une validation de longueur pour notre description et nos validations de prix :

    @validates('name')
    def validate_name(self, key, value):
        if not value:
            raise ValueError('Name cannot be empty.')
        if type(value) != str:
            raise ValueError('Name must be a string.')
        return value

    @validates('description')
        def validate_description(self, key, value):
        if not value:
            raise ValueError('Description cannot be empty.')
        if type(value) != str:
            raise ValueError('Description must be a string.')
        if not 10 



<p>Ou, nous pouvons conserver le même validateur pour les deux et utiliser l'argument clé transmis pour ajuster les validations exécutées pour chaque attribut.<br>
</p>

<pre class="brush:php;toolbar:false">    @validates('name', 'description', 'price')
    def validate(self, key, value):
        if key != 'price:
            if not value:
                raise ValueError(f'{key} cannot be empty.')
            if type(value) != str:
                raise ValueError(f'{key} must be string.')
            if key == 'description':
                if not 10 



<p>Hmm, c'est un peu compliqué, refactorisons en 2 validateurs distincts.<br>
</p>

<pre class="brush:php;toolbar:false">    @validates('name', 'description')
    def validate_text(self, key, value):
       if not value:
            raise ValueError(f'{key} cannot be empty.')
        if type(value) != str:
            raise ValueError(f'{key} must be string.')
        if key == 'description':
            if not 10 



<p>C'est mieux ! Voici notre modèle terminé :<br>
</p>

<pre class="brush:php;toolbar:false">from sqlalchemy.orm import validates
from config import db

class Sandwich(db.Model):
    __tablename__ = 'sandwiches'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)
    description = db.Column(db.String)
    price = db.Column(db.Float)

    @validates('name', 'description')
    def validate_text(self, key, value):
        if not value:
            raise ValueError(f'{key} cannot be empty.')
        if type(value) != str:
            raise ValueError(f'{key} must be string.')
        if key == 'description':
            if not 10 



<p>C'est ça ! Les validations sont un outil simple pour garantir que vos bases de données restent correctes.</p>


          

            
        
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal