Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/eastwu5788/pre-request
✨ Powerful python framework for validate request params, designed for Flask
https://github.com/eastwu5788/pre-request
filter flask request translation validation
Last synced: 2 months ago
JSON representation
✨ Powerful python framework for validate request params, designed for Flask
- Host: GitHub
- URL: https://github.com/eastwu5788/pre-request
- Owner: Eastwu5788
- License: mit
- Created: 2017-08-14T10:56:59.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2023-05-23T03:10:19.000Z (over 1 year ago)
- Last Synced: 2024-09-18T05:48:29.693Z (4 months ago)
- Topics: filter, flask, request, translation, validation
- Language: Python
- Homepage:
- Size: 462 KB
- Stars: 56
- Watchers: 1
- Forks: 7
- Open Issues: 5
-
Metadata Files:
- Readme: README.rst
- Changelog: CHANGES.rst
- Contributing: CONTRIBUTING.rst
- License: LICENSE
Awesome Lists containing this project
README
.. raw:: html
========
This framework is designed to validate request params for `Flask` web framework.
It has the following `unique` features:
* Cross Field and Cross Struct validations
* Array and Map diving, which allows any or all levels of a multidimensional field to be validated
* Customizable error responseInstall
-----------you can simply install it by PyPi:
::
pip install pre-request
Document
----------`pre-request` manual could be found at: https://pre-request.readthedocs.io/en/master/index.html
A Simple Example
------------------This is very easy to use `pre-request` in your project
.. code-block:: python
from flask import Flask
from pre_request import pre, Rule
app = Flask(__name__)
args = {
"userId": Rule(type=int, required=True)
}@app.route("/")
@pre.catch(args)
def hello_world(params):
from flask import g
return str(params == g.params)what happened in this code ?
1. Use `pre-request` library to import a global object `pre`
2. Define request params rule, e.g. `userId` must be type of `int` and required
3. Use `@pre.catch(req_params)` to filter input value
4. Use `~flask.g` or `def hello_world(params)` to get formatted input value。Complex Example
-----------------We use a very complex example to show the powerful of this framework. Otherwise you can find amount of examples at: `https://github.com/Eastwu5788/pre-request/tree/master/examples`
.. code-block:: python
from flask import Flask
from pre_request import pre, Ruleargs = {
"userFirst": {
"userId": Rule(type=int, required=False),
"socialInfo": {
"gender": Rule(type=int, enum=[1, 2], default=1),
"age": Rule(type=int, gte=18, lt=80),
"country": Rule(required=True, deep=False)
}
},
"userSecond": {
"userId": Rule(type=int, required=False, neq_key="userFirst.userId"),
"friends": Rule(type=dict, required=True, multi=True, structure={
"userId": Rule(type=int, required=True, dest="user_id"),
"userName": Rule(type=str, required=True, dest="user_name")
})
}
}app = Flask(__name__)
app.config["TESTING"] = True
client = app.test_client()@app.route("/structure", methods=["GET", "POST"])
@pre.catch(args)
def structure_handler(params):
return str(params)if __name__ == "__main__":
resp = app.test_client().post("/structure", json={
"userFirst": {
"userId": "13",
"socialInfo": {
"age": 20,
}
},
"userSecond": {
"userId": 14,
"friends": [
{
"userId": 13,
"userName": "Trump"
}
]
},
"country": "CN",
"userFirst.socialInfo.gender": 1
})print(resp.get_data(as_text=True))
Use parse
-------------We can use function `pre.parse` instead of decorator `@pre.catch()`
.. code-block:: python
args = {
"params": Rule(email=True)
}@app.errorhandler(ParamsValueError)
def params_value_error(e):
return pre.fmt_resp(e)@app.route("/index")
def example_handler():
rst = pre.parse(args)
return str(rst)Contributing
--------------How to make a contribution to Pre-request, see the `contributing`_.
.. _contributing: https://github.com/Eastwu5788/pre-request/blob/master/CONTRIBUTING.rst
Coffee
---------Please give me a cup of coffee, thank you!
BTC: 1657DRJUyfMyz41pdJfpeoNpz23ghMLVM3
ETH: 0xb098600a9a4572a4894dce31471c46f1f290b087
Links
------------
* Documentaion: https://pre-request.readthedocs.io/en/master/index.html
* Release: https://pypi.org/project/pre-request/
* Code: https://github.com/Eastwu5788/pre-request
* Issue tracker: https://github.com/Eastwu5788/pre-request/issues
* Test status: https://coveralls.io/github/Eastwu5788/pre-request