Czy istnieje sposób przeprowadzania sprawdzania poprawności na obiekcie po (lub w) ustawieniach właściwości, ale przed zatwierdzeniem sesji? Na przykład mam model domeny Device
, który ma właściwość mac
. Chciałbym upewnić się, że właściwość mac
zawiera poprawną i odkażoną wartość mac przed dodaniem lub zaktualizowaniem w bazie danych.Czy istnieje sposób przezroczystego wykonywania sprawdzania poprawności obiektów SQLAlchemy?
Wygląda na to, że podejście Pythoniczne polega na wykonywaniu większości czynności jako właściwości (w tym SQLAlchemy). Gdybym to zakodował w PHP lub Javie, prawdopodobnie wybrałbym metodę getter/setter w celu ochrony danych i zapewniłaby mi elastyczność w radzeniu sobie z tym w samym modelu domeny.
public function mac() { return $this->mac; }
public function setMac($mac) {
return $this->mac = $this->sanitizeAndValidateMac($mac);
}
public function sanitizeAndValidateMac($mac) {
if (! preg_match(self::$VALID_MAC_REGEX)) {
throw new InvalidMacException($mac);
}
return strtolower($mac);
}
Co to jest Pythonowy sposób radzenia sobie z tego typu sytuacjami za pomocą SQLAlchemy?
(Chociaż jestem świadomy, że sprawdzanie poprawności i powinny być obsługiwane w innym miejscu (tj. Ramy sieci) Chciałbym dowiedzieć się, jak obsługiwać niektóre z tych zasad walidacji specyficzne dla domeny, ponieważ są one często pojawiają się.)
UPDATE
wiem, że mogę używać property to zrobić w normalnych okolicznościach. Kluczową częścią jest to, że używam SQLAlchemy z tymi klasami. Nie rozumiem dokładnie, jak SQLAlchemy wykonuje swoją magię, ale podejrzewam, że samodzielne tworzenie i przesłonięcie tych właściwości może prowadzić do niestabilnych i/lub nieprzewidywalnych wyników.
Nie jestem pewien, jaki rodzaj magii SQLAlchemy wykorzystuje wiążą się właściwości klasy modelu. Nie założyłbym, że można bezpiecznie zdefiniować własną 'mac = property()' na mojej klasie. Myślę, że moje pytanie jest bezpieczne? Jeśli tak, to czy są jakieś gotcha? Jeśli nie, jakie są inne alternatywy? –
Nie ma magii. To nie są gotchas. Alternatywą jest to, co zwykle robimy: przeprowadzamy walidację * poza * klasą modelu, co jeszcze bardziej upraszcza. Zdefiniuj swoją walidację * poza * modelem, a następnie nie musisz się o to martwić. –