Automatically generated a RESTful API services for CRUD operation and queries on database
Project description
Inspired by: sandman2
based on: sqlalchemy-filters Flask-ResponseBuilder Flask-ErrorsHandler
Automatically generate a RESTful APIs for CRUD operation and advanced search on a database. If a list of Model is not provided, all tables are affected, instead you can customize:
resource name
fields name
resource url
allowed methods
hidden fields
Features
HATEOAS support
conditional requests via ETag header
full range of CRUD operations
filtering, sorting and pagination
customizable responses via query string
custom FETCH method for advanced search
JSON and XML response based on Accept header
export to csv available
meta resource description
cli tool to run autocrud on a database
Quickstart
Install flask_autocrud using pip:
$ pip install Flask-AutoCRUD
Example usage
from flask import Flask
from flask_autocrud import AutoCrud
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite+pysqlite:///db.sqlite3'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['AUTOCRUD_METADATA_ENABLED'] = True
db = SQLAlchemy(app)
AutoCrud(app, db)
app.run(debug=True)
Go to http://127.0.0.1:5000/resources and see all available resources with its endpoint. NOTE: you must set SQLALCHEMY_DATABASE_URI with your database.
If you want to see an example use with Flask-Admin see in example folder.
Filtering and Sorting
Add filters as query string parameters, they are used in AND. NOTE: At this time OR operator are not implemented.
You can use entity fields as parameter with the following placeholders:
null value: null
in operator: list separated by ;
not operator: ! means: not equal, not null, not in
comparators: __gt__ (grater), __lt__ (lesser), __gte__ (grater-equal), __lte__ (lesser-equal)
like operator: % for example: %%test%, %test% or %%test NOTE first % are not used in expression, it only indicated that value must be used with like operator.
Other parameters:
Use _fields parameter to get only the fields listed as value, separated by ;.
Use _limit and _page parameters for pagination.
Sorting is implemented with _sort parameter. The value is a list of field separated by ; You can prepend - to reverse order.
Use _export parameter to export data into csv format.
Use _extended in order to fetch data of related resources.
Use _as_table in order to flatten nested dict useful if you want render response as table
Example requests:
/invoice?InvoiceId=(35;344)
/invoice?Total=__lte__10&sort=Total
/invoice?fields=BillingCountry;Total;InvoiceId&InvoiceId=!355;344&sort=-InvoiceId
/invoice?fields=Total;InvoiceId&BillingPostalCode=!null&BillingCountry=%%ermany
/invoice?fields=Total;InvoiceDate;InvoiceId;CustomerId&page=2&limit=10
/invoice?InvoiceDate=(2009-01-01;2009-02-01 00:00:00)
Example FETCH:
curl --request FETCH \
--url http://127.0.0.1:5000/customer \
--header 'content-type: application/json' \
--data '{
"fields": [
"Address",
"City"
],
"related": {
"Employee": [
"FirstName",
"LastName"
],
"Invoice": [
"*"
]
},
"filters": [
{
"model": "Customer",
"field": "SupportRepId",
"op": "==",
"value": 5
},
{
"model": "Invoice",
"field": "Total",
"op": ">",
"value": 6
}
],
"sorting": [
{
"model": "Invoice",
"field": "Total",
"direction": "asc"
},
{
"model": "Customer",
"field": "Address",
"direction": "desc"
}
]
}'
AutoCRUD cli
You can use autocrud as a standalone application configurable via yaml file. Some options could be given via cli see: autocrud -h, but if configuration file is given these options will be ignored.
If gunicorn is installed on your system it will be chosen as wsgi http server otherwise the default Flask builtin simple server will be used. Under windows you can install waitress.
Configuration file contains 2 principal macro section:
app: every configuration under it will be passed to Flask config object
wsgi: every configuration under it will be passed to the chosen wsgi
For example:
app:
SQLALCHEMY_DATABASE_URI: sqlite+pysqlite:///examples/db.sqlite3
SQLALCHEMY_TRACK_MODIFICATIONS: false
wsgi:
bind: localhost:5000
workers: 1
threads: 1
Configuration
AUTOCRUD_METADATA_ENABLED: (default: True) enable metadata endpoint for a resource
AUTOCRUD_METADATA_URL: (default: ‘/meta) added at the end of url resource
AUTOCRUD_READ_ONLY: (default: False) enable only http GET method
AUTOCRUD_BASE_URL: (default: ‘’) prefix url for resources
AUTOCRUD_RESOURCES_URL: (default: ‘/resources’) url for all available resources
AUTOCRUD_RESOURCES_URL_ENABLED: (default: True) enable route for resources list
AUTOCRUD_SUBDOMAIN: (default: None) bind autocrud endpoints to a subdomain
AUTOCRUD_MAX_QUERY_LIMIT: (default 1000) max query limit, 0 means no limit
AUTOCRUD_FETCH_ENABLED: (default True) enable or disable FETCH method
AUTOCRUD_QUERY_STRING_FILTERS_ENABLED: (default True) enable or disable filters in querystring
AUTOCRUD_EXPORT_ENABLED: (default True) enable or disable export to csv
AUTOCRUD_DATABASE_SCHEMA: (default None) database schema to consider
AUTOCRUD_CONDITIONAL_REQUEST_ENABLED: (default True) allow conditional request
License MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file Flask-AutoCRUD-2.1.2.tar.gz
.
File metadata
- Download URL: Flask-AutoCRUD-2.1.2.tar.gz
- Upload date:
- Size: 19.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.7.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 08388ccfc78ad10d3c45ad74dcb8ed05193f81559e90fe77c18c9be10c79cac9 |
|
MD5 | 450bddeed11b34f63a721550099390ad |
|
BLAKE2b-256 | 0f1e102ca42ba60cac3b43e25d1b3ae7231c013a87e708347ab1446e60bc51a6 |