After looking at an NPM library called joi, I was amazed at what it could do and how it could make your javascript form validation easy.
I was also disappointed that a similar library didn't exist for python that was framework independant, so I created one!
Welcome to DontTrust
DontTrust is a python form validation library that is inspired by joi. It is similar to joi, but it does lack a bit in features. Before we look at its features, we have to install it:
pip install donttrust
Schemas
Schemas are what define a field in your form. There are 6 types of schemas currently:
- string
- number (includes
int
,float
andcomplex
) - date
- boolean
- any type
To initialise a schema:
from donttrust import Schema
username_field = Schema("username")
The "username"
parameter in Schema
is optional, but it is recommended because error messages will be formatted with it.
To create a schema of a specific type,
username_field = Schema("username").string()
# or .number(), .boolean(), .email(), etc
Validate a schema
There are two ways to validate a schema:
# With an exception
from donttrust import Schema
from donttrust.exceptions import DontTrustBaseException
username = Schema().required().string()
try:
print(username.validate(1234))
except DontTrustBaseException as e:
# Exception thrown
print(e.message)
# By returning false instead of an exception
from donttrust import Schema
username = Schema().required().string()
print(username.validate_without_exception(1234)) # False
print(username.validate_without_exception("test")) # test
DontTrust class
The DontTrust
class allows you to combine 1 or more schemas together.
from donttrust import DontTrust, Schema, ValidationError
try:
trust = DontTrust(username=Schema().string().required().alphanum().min(4).max(32).strip().to_lower()
password=Schema().string().required().min(8))
print(trust.validate(username="UseRNAME ", password="pas5word1")) # {"username": "username", "password": "pas5word1"}
print(trust.validate({"username": "1NV@LID"})) # Exception
except ValidationError as e:
print(e.message)
And that's it for this python library! For more information, visit the Docs, API Reference or the Github repository *(and drop a star while you're there ❤️)
If you have any suggestions for this project, create a Github issue or comment it down below. I'll try my best to implement it 🥳
Top comments (0)