Skip to main content

自动生成用于 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

配置

  1. AUTOCRUD_METADATA_ENABLED:(默认值:True)为资源启用元数据端点

  2. AUTOCRUD_METADATA_URL : (default: '/meta)添加在 url 资源的末尾

  3. AUTOCRUD_READ_ONLY:(默认值:False)仅启用 http GET 方法

  4. AUTOCRUD_BASE_URL : (default: '')资源的前缀 url

  5. AUTOCRUD_RESOURCES_URL : (default: '/resources')所有可用资源的 url

  6. AUTOCRUD_RESOURCES_URL_ENABLED:(默认值:True)为资源列表启用路由

  7. AUTOCRUD_SUBDOMAIN:(默认值:无)将 autocrud 端点绑定到子域

  8. AUTOCRUD_MAX_QUERY_LIMIT:(默认 1000)最大查询限制,0 表示无限制

  9. AUTOCRUD_FETCH_ENABLED:(默认为 True)启用或禁用 FETCH 方法

  10. AUTOCRUD_QUERY_STRING_FILTERS_ENABLED:(默认 True)启用或禁用查询字符串中的过滤器

  11. AUTOCRUD_EXPORT_ENABLED:(默认为 True)启用或禁用导出到 csv

  12. AUTOCRUD_DATABASE_SCHEMA:(默认无)要考虑的数据库架构

  13. AUTOCRUD_CONDITIONAL_REQUEST_ENABLED:(默认 True)允许有条件的请求

去做

  • 自动招摇 ui 或替代 api 文档

欢迎反馈和贡献。

麻省理工学院许可证

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

Flask-AutoCRUD-2.2.1.tar.gz (22.4 kB 查看哈希)

已上传 source