DEV Community

arnu515
arnu515

Posted on

2 2

Form validation in python made #EZ (By Yours Truly)

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
Enter fullscreen mode Exit fullscreen mode

Schemas

Schemas are what define a field in your form. There are 6 types of schemas currently:

  • string
  • number (includes int, float and complex)
  • email
  • date
  • boolean
  • any type

To initialise a schema:

from donttrust import Schema

username_field = Schema("username")
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode
# 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
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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 🥳

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs