为crud操作和数据库查询自动生成restful api服务
Flask-AutoCRUD的Python项目详细描述
灵感来源:sandman2
基于:sqlalchemy-filtersFlask-ResponseBuilderFlask-ErrorsHandler
为crud操作和数据库高级搜索自动生成restfulapi。 如果未提供Model列表,则所有表都会受到影响,您可以自定义:
- 资源名称
- 字段名
- 资源URL
- 允许的方法
- 隐藏字段
功能
- Hateoas支持
- 通过ETag报头的条件请求
- 全系列积垢操作
- 过滤、排序和分页
- 通过查询字符串可自定义的响应
- 高级搜索的自定义获取方法
- 基于accept头的json和xml响应
- 导出到CSV可用
- 元资源描述
- 在数据库上运行autocrud的cli工具
快速启动
使用pip:
安装flask_autocrud。$ pip install Flask-AutoCRUD
示例用法
fromflaskimportFlaskfromflask_autocrudimportAutoCrudfromflask_sqlalchemyimportSQLAlchemyapp=Flask(__name__)app.config['SQLALCHEMY_DATABASE_URI']='sqlite+pysqlite:///db.sqlite3'app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=Falseapp.config['AUTOCRUD_METADATA_ENABLED']=Truedb=SQLAlchemy(app)AutoCrud(app,db)app.run(debug=True)
转到http://127.0.0.1:5000/resources并查看所有可用资源及其 终点。注意:必须使用数据库设置sqlalchemy_database_uri。
如果您想查看与flask admin一起使用的示例,请参见example文件夹中的。
过滤和排序
添加筛选器作为查询字符串参数,它们在和中使用。注意:此时或运算符未实现。
您可以将实体字段用作具有以下占位符的参数:
- 空值:null
- in运算符:由; 分隔的列表
- NOT运算符:!表示:不等于,不为空,不在
- 比较器:__gt__(grater)、__lt__(less)、__gte__(grater equal)、__lte__(less equal)
- like运算符:%例如:%%test%,%test%或%%test 注意第一个%不用于表达式,它只指示值必须与LIKE运算符一起使用。
其他参数:
- 使用_fields参数只获取列为value的字段,用;分隔。
- 使用_limit和_page参数进行分页。
- 排序是用_sort参数实现的。该值是由;分隔的字段列表 您可以将-前置到相反的顺序。
- 使用_export参数将数据导出为csv格式。
- 使用_extended获取相关资源的数据。
- 如果希望将响应呈现为表,请使用_as_table来展平嵌套的dict
示例请求:
- /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)
示例获取:
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
您可以使用autocrud作为一个独立的应用程序,可以通过yaml文件进行配置。 可以通过cli提供一些选项,请参见:autocrud -h, 但是,如果配置文件被赋予这些选项,这些选项将被忽略。
如果系统上安装了gunicorn,它将被选为wsgi http服务器 否则将使用默认的flask内置简单服务器。 在windows下,您可以安装waitress。
配置文件包含2个主宏部分:
- app:下面的每个配置都将传递给flask config对象
- wsgi:它下面的每个配置都将传递给所选的wsgi
例如:
app:SQLALCHEMY_DATABASE_URI:sqlite+pysqlite:///examples/db.sqlite3SQLALCHEMY_TRACK_MODIFICATIONS:falsewsgi:bind:localhost:5000workers:1threads:1
配置
- AUTOCRUD_METADATA_ENABLED:(默认值:true)为资源启用元数据终结点
- AUTOCRUD_METADATA_URL:(默认值:'/meta)添加在url资源的末尾
- AUTOCRUD_READ_ONLY:(默认值:false)仅启用http get方法
- AUTOCRUD_BASE_URL:(默认值:'')资源的前缀url
- AUTOCRUD_RESOURCES_URL:(默认值:'/resources')所有可用资源的URL
- AUTOCRUD_RESOURCES_URL_ENABLED:(默认值:true)为资源列表启用路由
- AUTOCRUD_SUBDOMAIN:(D)默认:无)将autocrud终结点绑定到子域
- AUTOCRUD_MAX_QUERY_LIMIT:(默认1000)最大查询限制,0表示无限制
- AUTOCRUD_FETCH_ENABLED:(默认为true)启用或禁用获取方法
- AUTOCRUD_QUERY_STRING_FILTERS_ENABLED:(默认为true)在查询字符串中启用或禁用筛选器
- AUTOCRUD_EXPORT_ENABLED:(默认为true)启用或禁用导出到csv
- AUTOCRUD_DATABASE_SCHEMA:(默认为无)要考虑的数据库架构
- AUTOCRUD_CONDITIONAL_REQUEST_ENABLED:(默认为true)允许条件请求
许可证MIT