为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

配置

  1. AUTOCRUD_METADATA_ENABLED(默认值:true)为资源启用元数据终结点
  2. AUTOCRUD_METADATA_URL(默认值:'/meta)添加在url资源的末尾
  3. AUTOCRUD_READ_ONLY(默认值:false)仅启用http get方法
  4. AUTOCRUD_BASE_URL(默认值:'')资源的前缀url
  5. AUTOCRUD_RESOURCES_URL(默认值:'/resources')所有可用资源的URL
  6. AUTOCRUD_RESOURCES_URL_ENABLED(默认值:true)为资源列表启用路由
  7. AUTOCRUD_SUBDOMAIN(D)默认:无)将autocrud终结点绑定到子域
  8. AUTOCRUD_MAX_QUERY_LIMIT(默认1000)最大查询限制,0表示无限制
  9. AUTOCRUD_FETCH_ENABLED(默认为true)启用或禁用获取方法
  10. AUTOCRUD_QUERY_STRING_FILTERS_ENABLED(默认为true)在查询字符串中启用或禁用筛选器
  11. AUTOCRUD_EXPORT_ENABLED(默认为true)启用或禁用导出到csv
  12. AUTOCRUD_DATABASE_SCHEMA(默认为无)要考虑的数据库架构
  13. AUTOCRUD_CONDITIONAL_REQUEST_ENABLED(默认为true)允许条件请求

许可证MIT

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java Square类   java Android RecyclerView内部视图寻呼机   java类变量:公共访问只读,但私有访问r/w   java不兼容ClassChangeError java8   安卓java on on参数,如参数iNIT.C++C++   java如何在下面的代码中根据我的喜好设置JTextArea和JTextField的大小?   java使用CustomAdapter更改ListView的显示方式   jakarta ee什么是Java Servlet?   传递给Javasocket程序的参数   java为什么我的计划任务在这两者之间有很长的延迟   Java“迭代器”关键字   java获取数据库SQLite Android中插入行的行ID   网络如何在Java应用程序中设置H2嵌入式数据库,以便在小型网络中使用?   数组Java:写出所有包含K1的Nbit序列   java返回随机字符串键的整数值   在java中解析到日期的字符串时保留时区   java如何修复“运行配置错误:[在SDK中找不到Rails]”?   Java包装器OutofMemory