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)
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
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
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>
Das obige ist der detaillierte Inhalt vonValidator. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!