flaskvel

A small package for validating incoming HTTP requests


Keywords
flask, http, validator, request
License
MIT
Install
pip install flaskvel==2.1

Documentation

FlaskVel

A small package that provides a convenient method to validate incoming HTTP requests with a variety of powerful validation rules, highly customizable and heavily influenced by Laravel.

Jump straight to the documentation.


Instalation

To install FlaskVel run:

pip install flaskvel

FlaskVel is now installed, check out the Quickstart.

This package is only compatible with Python 3+.


Quickstart

Lets suppose we want an endpoint that is used to register a user. First of all, we have to instantiate Flask and to also initialize FlaskVel by calling the constructor with its appropriate parameters.

# main.py

from flask import Flask, jsonify
from flaskvel import Flaskvel, validate, BodyFormats

app = Flask(__name__)
Flaskvel(app)

Now we are ready to define our endpoint.

# main.py

@app.route("/register", methods=["POST"])
def register():
    # some code for registering the user
    # ...
    return jsonify({"status": "ok"}), 200

To add validations let's create a class that derives from flaskvel.Validator and contains the rules.

# MyValidator.py

from flaskvel import Validator, Rules

class MyValidator(Validator):
    def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs) # MUST always be called first
        self.rules = {
            "username": ["required", "string"],
            "password": ["required", "string", "min:8", "max:32", "confimed"],
            "email": [Rules.REQUIRED, Rules.EMAIL] # we can also use predefined constants instead of strings
        }

For more info about writing rules see Rules syntax.

Now we can add our validator to the endpoint using one of the decorators provided by FlaskVel.

@app.route("/register", methods=["POST"])
@validate(MyValidator, BodyFormats.ANY)
def register():
    return jsonify({"status": "ok"}), 200

The decorator used, @validate(...) or @validate_no_validator(...), must be positioned after @app.route(...).

You can find a list of all the rules here.


Jump straight to the documentation.