自动生成用于 CRUD 操作和数据库查询的 RESTful API 服务
项目描述
灵感来源:sandman2
基于:sqlalchemy-filters Flask-ResponseBuilder Flask-ErrorsHandler
自动生成用于 CRUD 操作和数据库高级搜索的 RESTful API。如果未提供Model列表,则所有表都会受到影响,否则可以自定义:
资源名称
字段名称
资源网址
允许的方法
隐藏字段
特征
HATEOAS 支持
通过 ETag 标头的条件请求
全方位的 CRUD 操作
过滤、排序和分页
通过查询字符串可定制的响应
用于高级搜索的自定义 FETCH 方法
基于 Accept 头的内容协商
导出到 csv 可用
元资源描述
在数据库上运行 autocrud 的 cli 工具
快速开始
使用pip安装flask_autocrud:
$ pip install Flask-AutoCRUD
示例用法
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)
转到http://127.0.0.1:5000/resources并查看所有可用资源及其端点。注意:您必须使用您的数据库设置 SQLALCHEMY_DATABASE_URI。
如果您想查看使用 Flask-Admin 的示例,请参见示例文件夹。
过滤和排序
添加过滤器作为查询字符串参数,它们应用于 AND,不支持 OR 运算符。
您可以使用实体字段作为参数,并在值中使用以下占位符:
空值:空
in 运算符:由;分隔的列表
不是运算符:!表示:不等于,不为空,不在
比较器:__gt__(磨碎),__lt__(较小),__gte__(磨碎相等),__lte__(较小相等)
like 运算符:%例如:%%test%、%test% 或 %%test 注意前 % 不用于表达式,它只表示 value 必须与 like 运算符一起使用。
其他参数,注意都是以_开头的:
使用_fields参数仅获取列为值的字段,用;分隔 .
使用_limit和_page参数进行分页。
排序是使用_sort参数实现的。该值是由;分隔的字段列表 您可以在前面加上-以颠倒顺序。
使用_export参数将数据导出为 csv 格式,并将文件名作为值传递或留空为默认值。您也可以使用Accept:text/csv标头,但它具有不同的行为,因为转换是在响应结束时应用的。
使用_related以获取以;分隔的值列出的相关资源的数据 或者如果你想要全部留空。在先前版本的 2.2.0 中添加使用_extended,不带过滤器。
如果您希望将响应呈现为表格并结合 html 格式的响应,或者只是如果您不想要嵌套的 json(不需要值),请使用_as_table来展平嵌套的 dict。
使用_no_links过滤相关数据和页面的链接(不需要值)。
示例请求:
/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)
/track?_related=专辑;流派
自定义方法 FETCH
FETCH 请求就像一个 GET 集合资源,其主体表示要应用的过滤器。它与查询字符串中的过滤器不同,因为它用于减少响应(过滤器在AND中),这里用于产生搜索响应,实际上您可以请求和过滤组合相关资源的数据(如sql JOIN)并使用具有简单语法的 OR 运算符。
请参阅:sqlalchemy-filters文档以获取过滤器说明和更多示例。
如果您无法使用 FETCH,您可以使用带有 header: X-HTTP-Method-Override: FETCH的 POST 方法。如果您只想要标头而不想要响应,请使用 header: X-HTTP-Method-Override: HEAD。
以下是/customer上的正文请求示例:
{
"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 --help。
从 2.2.0 版本开始可以使用多个 wsgi 服务器,而在之前的版本中只能使用 gunicorn 或 waitress;此外 cli 选项已更改。
配置文件包含 2 个主要宏部分:
app: 它下的每个配置都会传递给 Flask 配置对象
wsgi:它下的每一个配置都会被传递给选择的wsgi服务器
例如:
app:
SQLALCHEMY_DATABASE_URI: sqlite+pysqlite:///examples/db.sqlite3
SQLALCHEMY_TRACK_MODIFICATIONS: false
wsgi:
bind: localhost:5000
workers: 1
threads: 1
配置
AUTOCRUD_METADATA_ENABLED:(默认值:True)为资源启用元数据端点
AUTOCRUD_METADATA_URL : (default: '/meta)添加在 url 资源的末尾
AUTOCRUD_READ_ONLY:(默认值:False)仅启用 http GET 方法
AUTOCRUD_BASE_URL : (default: '')资源的前缀 url
AUTOCRUD_RESOURCES_URL : (default: '/resources')所有可用资源的 url
AUTOCRUD_RESOURCES_URL_ENABLED:(默认值:True)为资源列表启用路由
AUTOCRUD_SUBDOMAIN:(默认值:无)将 autocrud 端点绑定到子域
AUTOCRUD_MAX_QUERY_LIMIT:(默认 1000)最大查询限制,0 表示无限制
AUTOCRUD_FETCH_ENABLED:(默认为 True)启用或禁用 FETCH 方法
AUTOCRUD_QUERY_STRING_FILTERS_ENABLED:(默认 True)启用或禁用查询字符串中的过滤器
AUTOCRUD_EXPORT_ENABLED:(默认为 True)启用或禁用导出到 csv
AUTOCRUD_DATABASE_SCHEMA:(默认无)要考虑的数据库架构
AUTOCRUD_CONDITIONAL_REQUEST_ENABLED:(默认 True)允许有条件的请求
去做
自动招摇 ui 或替代 api 文档
欢迎反馈和贡献。
麻省理工学院许可证