Validator

Nov 18, 2024 am 06:43 AM

Validator

Validierungen sind eine Methode, um sicherzustellen, dass unsere Datenbanken nur die Art von Informationen erhalten, die für jedes Attribut geeignet sind. Schließlich möchten wir nicht, dass unerwartete Daten in unseren Code gelangen und unerwartetes Verhalten verursachen. Glücklicherweise verfügt SQLAlchemy über ein Paket, das Validierungen schnell und einfach macht!

Schauen wir uns einige einfache Beispiele an. Stellen Sie sich vor, wir haben ein einfaches Modell, Sandwich. Hier haben wir unsere Datenbank bereits initialisiert und importieren sie aus einer Konfigurationsdatei.

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)
Nach dem Login kopieren

Wenn wir Validierungen zu einem dieser Attribute hinzufügen möchten, müssen wir zuerst das Validierungspaket importieren.

aus sqlalchemy.orm importiert validiert

Und dann schreiben Sie unsere Funktion mit dem „@validates“-Dekorator in das Modell.

    @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
Nach dem Login kopieren

Also, was ist hier los? Lassen Sie es uns aufschlüsseln. @validates ist ein Dekorator, der unserem ORM mitteilt, dass er alle mit dem Schlüssel „name“ empfangenen Werte durch unsere Validierungsfunktion weiterleiten soll, bevor er sie zur Datenbank hinzufügt. Der Wert, den wir zurückgeben, wird schließlich unserer Datenbank übergeben. Das Argument „key“ ist der Schlüssel, der ausgewertet wird, in diesem Fall „name“. Der Wert ist der Wert dieses Schlüssels, also der tatsächliche Name (hoffentlich im Text), den wir hinzufügen möchten. Hier prüfen wir also, ob das übergebene Namensattribut nicht leer ist, sondern dass es sich tatsächlich um eine Zeichenfolge handelt. Wenn nicht, geben wir einen Fehler aus.

Wir können auch mehrere Attribute über denselben Dekorator ausführen, indem wir sie zu seinen Argumenten hinzufügen.

    @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
Nach dem Login kopieren

Diese Funktion validiert unsere Namens- und Beschreibungsattribute, aber normalerweise müssen wir nicht die gleichen Validierungen für verschiedene Attribute durchführen. Je nachdem, wie unterschiedlich und wie viele Validierungen wir haben, können wir dies auf verschiedene Arten tun. Wir können einen separaten Validator für unsere anderen Attribute ausführen. Fügen wir auch eine Längenvalidierung für unsere Beschreibungs- und Preisvalidierungen hinzu:

    @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>Oder wir können für beide den gleichen Validator beibehalten und das übergebene Schlüsselargument verwenden, um anzupassen, welche Validierungen für jedes Attribut ausgeführt werden.<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, das ist etwas chaotisch, lasst uns in zwei separate Validatoren umgestalten.<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>Das ist besser! Hier ist unser fertiges Modell:<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>Das ist es! Validierungen sind ein einfaches Tool, um sicherzustellen, dass Ihre Datenbanken korrekt und korrekt bleiben.</p>


          

            
        
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonValidator. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie benutze ich eine schöne Suppe, um HTML zu analysieren? Wie benutze ich eine schöne Suppe, um HTML zu analysieren? Mar 10, 2025 pm 06:54 PM

Wie benutze ich eine schöne Suppe, um HTML zu analysieren?

Bildfilterung in Python Bildfilterung in Python Mar 03, 2025 am 09:44 AM

Bildfilterung in Python

So herunterladen Sie Dateien in Python So herunterladen Sie Dateien in Python Mar 01, 2025 am 10:03 AM

So herunterladen Sie Dateien in Python

So verwenden Sie Python, um die ZiPF -Verteilung einer Textdatei zu finden So verwenden Sie Python, um die ZiPF -Verteilung einer Textdatei zu finden Mar 05, 2025 am 09:58 AM

So verwenden Sie Python, um die ZiPF -Verteilung einer Textdatei zu finden

Wie man mit PDF -Dokumenten mit Python arbeitet Wie man mit PDF -Dokumenten mit Python arbeitet Mar 02, 2025 am 09:54 AM

Wie man mit PDF -Dokumenten mit Python arbeitet

Wie kann man mit Redis in Django -Anwendungen zwischenstrichen Wie kann man mit Redis in Django -Anwendungen zwischenstrichen Mar 02, 2025 am 10:10 AM

Wie kann man mit Redis in Django -Anwendungen zwischenstrichen

Wie führe ich ein tiefes Lernen mit Tensorflow oder Pytorch durch? Wie führe ich ein tiefes Lernen mit Tensorflow oder Pytorch durch? Mar 10, 2025 pm 06:52 PM

Wie führe ich ein tiefes Lernen mit Tensorflow oder Pytorch durch?

Einführung des natürlichen Sprach -Toolkits (NLTK) Einführung des natürlichen Sprach -Toolkits (NLTK) Mar 01, 2025 am 10:05 AM

Einführung des natürlichen Sprach -Toolkits (NLTK)

See all articles