V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
fy
V2EX  ›  分享创造

Python web 终极 CRUD 方案(或许是) alpha 版本,征求一些反馈

  •  
  •   fy ·
    fy0 · 2021-04-19 02:00:39 +08:00 · 2838 次点击
    这是一个创建于 1332 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目地址

    https://github.com/fy0/pycrud/tree/dev

    说明

    简单来说这是一个高层 ORM,主要扩展了两个点,一个是支持用 JSON 做查询,还有就是支持角色权限

    定位和 GraphQL 相同,我觉得 GraphQL 思路很好,但是太难用了。

    安装

    pip install pycrud==1.0.0a0
    

    特色

    • 需要写的代码量很少,支持主流 ORM,很容易集成到任意 web 框架(examples 中有一个 125 行单文件的 demo,Fastapi + SQLAlchemy 带权限管理)

    • 能从前端构造一些查询选择数据,例如 /api/user/list?id.ge=10&id.lt=15,适用于 CRUD 中的 RUD 操作

    • 有一套基于角色的鉴权,粒度是数据库字段,可以限制角色能查 /读 /写 /插入的字段,以及能删除的表

    demo 运行起来之后可以用 http://127.0.0.1:3000/redoc 看 API 文档。

    其他

    标题太夸张了而且违反了广告法,主要目的还是希望大家试一试,给一些意见。

    感觉 python web 用的人越来越少了

    11 条回复    2021-04-19 11:19:01 +08:00
    LeeReamond
        1
    LeeReamond  
       2021-04-19 04:06:09 +08:00 via Android
    没什么建议,个人微不足道的意见是这个项目出发点不合适。因为业务需求是复杂的,所以工程哲学永远是解耦,你这个项目又强行耦合回去了。开箱即用的带权限 curd 乍一听让人很兴奋,结果看了一下你的项目代码,问了一下自己,能用吗?答案是不符合需求,所以回到了上述的耦合问题。另外 pyweb 用户越来越少是伪命题
    wellsc
        2
    wellsc  
       2021-04-19 06:26:00 +08:00 via iPhone
    不是感觉,是事实
    popil1987
        3
    popil1987  
       2021-04-19 07:29:54 +08:00
    一般根据自己需求自己写 crud,cud 比较固定,r 预留一个传 stmt,自己用 sqlalchemy 组一个 stmt 当作参数就好
    WildCat
        4
    WildCat  
       2021-04-19 08:04:19 +08:00
    做一个类似 ActiveRecord 的方案都足够了。
    fy
        5
    fy  
    OP
       2021-04-19 10:17:44 +08:00
    @LeeReamond 个人微不足道的意见是这个回复出发点不合适。因为文章主题是复杂的,所以回复哲学永远是具体,你这个评论又强行抽象回去了。掷地有声的大段文本乍一听让人很兴奋,结果看了一下你的回复内容,问了一下自己,说的是什么?答案是没有具体内容,所以回到了上述的“具体”问题。

    ---

    没意义的话我就当没看到。想听听你对 graphql 有什么高见?
    fy
        6
    fy  
    OP
       2021-04-19 10:32:19 +08:00
    @popil1987

    因为觉得多数操作重复,所以进行了封装。直接捅到 API 那一层。

    @WildCat

    我在这块选的方案更接近于 Data Mapper 。不过主要花费精力还是在 json 转查询和拦截器上。
    youngce
        7
    youngce  
       2021-04-19 10:43:54 +08:00
    这种级别的 CRUD,drf 感觉更加简单
    carlclone
        8
    carlclone  
       2021-04-19 10:47:11 +08:00 via Android   ❤️ 1
    这种叫过度封装
    fy
        9
    fy  
    OP
       2021-04-19 10:56:48 +08:00
    @youngce

    DRF 不能处理条件查询、order 等内容

    可能我文档没有说清楚,这个库的 CRUD 可以提供一些查询条件,类似 graphql,但是易用性上要好得多。

    比如说:
    ```
    # 查询 2020 年 1 月 1 日之后的文章:
    http http://localhost:9999/api/topic/list?time.ge=1577808000

    # 创建新文章
    http -f POST "http://localhost:9999/api/topic/create" title="Hello Again" content="Content changed" time=1578729600

    # 修改 id 为 1 的文章
    http -f POST "http://localhost:9999/api/topic/update?id=1" title="Hello Again" content="Content changed"
    ```
    youngce
        10
    youngce  
       2021-04-19 11:04:34 +08:00   ❤️ 1
    @fy #9 “DRF 不能处理条件查询、order 等内容” 那说明你 drf 还没有了解清楚,你这种库的最大竞品就是 DRF 了吧,建议至少看看 drf 支持的功能。


    https://www.django-rest-framework.org/api-guide/filtering/

    drf 自带了排序、搜索、过滤

    这种基础的增删改查,drf 也支持完全 resful 的自带功能

    另外 drf 扩展起来也非常方便
    fy
        11
    fy  
    OP
       2021-04-19 11:19:01 +08:00
    @youngce

    原来还有这种操作,那这样说的话这个方向是没问题的。

    我不太了解 Django,刚看这文档的话,他是不是不支持各种算符啊?好像这篇文档只有这些:

    '^' Starts-with search.
    '=' Exact matches.
    '@' Full-text search. (Currently only supported Django's PostgreSQL backend.)
    '$' Regex search.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3058 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:51 · PVG 18:51 · LAX 02:51 · JFK 05:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.