V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
linlance
V2EX  ›  Python

Flask 只好放弃了, Django 拿起。。。其实我很喜欢 Flask。。。

  •  
  •   linlance · 2019-07-27 16:57:06 +08:00 · 9286 次点击
    这是一个创建于 1954 天前的主题,其中的信息可能已经有所发展或是发生改变。
    反反复复的用 Flask 做了几个小站,都是不用太复杂的类型,感觉很好用。
    但是遇到开发用户系统,需要有角色,权限问题的时候,Flask 太麻烦了,几个第三方库都不太好用。

    十六进制权限值 Flask 狗书 用十六进制来判断,放弃
    Flask-Security user 必须要有 email,active 字段,并且必须用 WTF
    Flask Principal flask_principal 的作者已经不更新了,上次提交代码是 2015 年。
    PyCasbin 国人 2019.1 开始

    目前就这四种第三方库,十六进制?有多少权限,就需要写多长的 16 位,然后还记得哪个位置是什么权限么?这种也太坑了,直接放弃。
    Flask-Security 必须要有 email,active,必须用 WTF,不太想用。
    Flask Pricipal,已经 4 年前了。
    PyCasbin,国人的刚开始几个月,用在项目上,实在是不放心。。。

    自己实现? RBAC 权限管理 基于角色的访问控制。
    感觉好复杂啊。。。。

    然后在咱们这里终于看到描述了,Flask 很优美,但是每个都得自己搭建,也太累了。。。
    我好不容易打通其他的,终于在这个用户角色权限上被拦了好几天。。。
    还是学习一下 Django 吧。。。基本上开箱即用。
    64 条回复    2020-05-21 23:18:40 +08:00
    coolair
        1
    coolair  
       2019-07-27 17:02:54 +08:00
    你应该来一个一劳永逸的解决办法,我就是自己写了套带 RBAC 的 Base 系统,公司所有的项目都基于它。后台界面靓丽,可定制程度高。
    lihongjie0209
        2
    lihongjie0209  
       2019-07-27 17:15:04 +08:00
    ```
    自己实现? RBAC 权限管理 基于角色的访问控制。
    感觉好复杂啊。。。

    ```

    啥????这个有什么困难的
    gsj987
        3
    gsj987  
       2019-07-27 17:35:57 +08:00
    Django 我从 0.96 开始用,除了他的 mttv 范式现在有点不时髦,其他就没怎么烦恼过。flask 经常有这样那样的问题,主要是第三方的问题,但是也挺难受的。本来咱用 python 就是图方便,flask 适合将脚本输出服务,Django 适合快速搭建简单业务,但是项目一大型还是上工业级框架吧
    lowman
        4
    lowman  
       2019-07-27 17:39:45 +08:00
    python forever
    linlance
        5
    linlance  
    OP
       2019-07-27 17:44:44 +08:00
    @gsj987 工业级框架?
    我感觉 Django 貌似已经可以搭建比较大的应用了呀。
    不过我确实是觉得使用 python 就是图方便,Flask 需要自己弄来弄去,总会被各种小问题给折腾一整天,超级浪费时间。
    linlance
        6
    linlance  
    OP
       2019-07-27 17:46:45 +08:00
    @coolair 你这个确实一劳永逸,但是自己能力不够,对 RBAC 的理解还不太明白,没有办法写出来,不然 Flask 也可以使用了,大部分功能其实都实现了。但是对用户和权限,角色,以前都没考虑,都是 admin 一个账户解决。
    现在要考虑这部分内容了,觉得好麻烦,网上的教程也不是太清楚。。哎。
    我在考虑使用 DRF 框架来解决这些事,如上所说的,使用 python 是为了方便,快速搭建系统出来,不想在细节上费时间。
    gesse
        7
    gesse  
       2019-07-27 17:47:39 +08:00
    我一直觉得 flask 适合写 api
    linlance
        8
    linlance  
    OP
       2019-07-27 17:47:40 +08:00
    @lihongjie0209 初学者,觉得这个实在有点麻烦,起码建立 5 个表,还需要写模型吧?我都没想明白怎么实现这块。哎。。
    gaigechunfeng
        9
    gaigechunfeng  
       2019-07-27 17:48:34 +08:00
    我知道一个开源项目 lin-cms,在 github 上,他有后台就是用 flask 的。
    权限管理做的也很齐全,算是一个比较好的脚手架吧。
    aaronhua
        10
    aaronhua  
       2019-07-27 18:07:38 +08:00
    对 flask 的确是很有好感,只是一些简单的接口用 flask。相对于 django 各有优势。看情况用吧
    maigebaoer
        11
    maigebaoer  
       2019-07-27 18:22:32 +08:00 via Android
    试试 laravel?
    wukongkong
        12
    wukongkong  
       2019-07-27 18:32:43 +08:00 via iPhone
    2000 哥?
    gsj987
        13
    gsj987  
       2019-07-27 18:46:33 +08:00
    @linlance 大型项目还是要用 java 或 c#,python 的框架 django 是最强了,但是一庞大起来,或者业务复杂起来,每一次重构都是痛苦。
    nine
        14
    nine  
       2019-07-27 18:53:13 +08:00
    早用 Ruby on Rails 早超生,不然 3 年后回来发现还在纠结框架的事。
    stamaimer
        15
    stamaimer  
       2019-07-27 19:31:00 +08:00 via iPhone
    flask-security 可以自己改啊
    linlance
        16
    linlance  
    OP
       2019-07-27 19:42:20 +08:00
    @maigebaoer 最早放弃的东西,学习曲线太陡了。。。python 很容易出东西。

    @wukongkong 是我:)

    @gsj987 难道非得 java 么?我实在对 java 深恶痛绝,浏览器老得升级 java 插件,烦死。

    @nine ROR 一直没有入门,总觉得跟 Django 之类的 python 框架,完全不同。

    @stamaimer 自己改的难度有点大:(,弄了半天,业务逻辑都还没上呢,先被这些小坑给绊住了。
    beimenjun
        17
    beimenjun  
       2019-07-27 19:52:17 +08:00
    @linlance,你是之前 D 版的那位吗?
    3789
        18
    3789  
       2019-07-27 19:57:44 +08:00 via Android
    @linlance 浏览器老得升级 java 插件是什么意思?
    linlance
        19
    linlance  
    OP
       2019-07-27 20:03:10 +08:00
    @beimenjun 是的,一直在 D 版:)每天刷~~都忘记 coding 了,哈哈。

    @3789 java 做的那些 B/S 产品,都有 java 虚拟机更新等等事情呀。经常有各种问题,在不同的电脑上。
    CallMeReznov
        20
    CallMeReznov  
       2019-07-27 21:07:59 +08:00
    本身就是小站点小页面用的,你要起大的肯定是更完备的酱狗啊
    neoblackcap
        21
    neoblackcap  
       2019-07-27 22:09:43 +08:00
    @linlance 如果我没记错的话,16 进制权限值这个说法不是很对。根据经验来看,这个应该是 bitmap,应该转化为二进制来看,一个位代表一个权限。
    一般我们配权限的时候都是采取位操作的方法,比如 0x01 | 0x02 来实现两个权限的并集。权限应该是写成常量,用的时候用按位取或(bitwise or)
    ryd994
        22
    ryd994  
       2019-07-27 22:32:20 +08:00 via Android   ❤️ 1
    权限你难道手打吗?????
    你有没有考虑过 C 程序员是怎么活这么久的?
    enum permission {
    permission_a,
    permission_b,
    ...
    }
    #define PERMISSION_A_MASK = 1 << permission_a;
    #define PERMISSION_B_MASK = 1 << permission_b;

    if (Value & PERMISSION_A_MASK) ...

    Value |= PERMISSION_A_MASK;
    Value &= ~PERMISSION_B_MASK;
    kqz901002
        23
    kqz901002  
       2019-07-27 22:35:42 +08:00
    @linlance #16 如果是个人项目或者小项目无所谓语言,一般团队项目还是 Java 为主,人力是重要因素
    fqxufo
        24
    fqxufo  
       2019-07-27 22:43:25 +08:00
    追随 2kg
    c0878
        25
    c0878  
       2019-07-27 22:45:00 +08:00
    哟 2k 哥
    ampedee
        26
    ampedee  
       2019-07-27 22:57:13 +08:00 via Android
    试试 flask-rbac
    cnkiller
        27
    cnkiller  
       2019-07-27 23:00:53 +08:00 via Android
    来自 d 版带着爱
    caicaiwoshishui
        28
    caicaiwoshishui  
       2019-07-27 23:01:13 +08:00 via Android
    @gsj987 工业级框架指的是?
    catcalse
        29
    catcalse  
       2019-07-27 23:09:04 +08:00 via Android
    别放弃,我还在玩呢
    nine
        30
    nine  
       2019-07-27 23:31:44 +08:00   ❤️ 1
    @linlance 必然是完全不同的,除了 Rails 其他 web 框架都是在忙于配置,做些啰里啰嗦没用的事情,“看起来”很灵活,其实很狗屎。
    swsh007
        31
    swsh007  
       2019-07-27 23:37:58 +08:00 via Android
    WordPress 好了
    charlie21
        32
    charlie21  
       2019-07-27 23:52:33 +08:00
    @nine ror 框架 隐藏的细节有点儿多呀,用起来不踏实,就像对着一个黑盒 ( rails SDK ) 编程

    无数人写 PHP 都不爱用框架的
    charlie21
        33
    charlie21  
       2019-07-27 23:52:54 +08:00
    就因为框架隐藏的细节太多了
    niubee1
        34
    niubee1  
       2019-07-28 00:05:49 +08:00
    主要是楼主太弱鸡,遇到问题就想绕道,这样一直就会很弱, 没有别人的库连代码都不会写了
    jakes
        35
    jakes  
       2019-07-28 00:11:37 +08:00 via iPhone
    Java 做的 BS 和 Java 有什么关系? Java 虚拟机升级影响什么。。。?楼主完全没搞明白吧?
    rogwan
        36
    rogwan  
       2019-07-28 00:41:00 +08:00 via Android
    @charlie21 flask 隐藏了很多细节,但是确实隐藏的很精妙,django 则更直观。
    nine
        37
    nine  
       2019-07-28 01:03:46 +08:00
    @charlie21 looks like 吧?实际使用比任何其他框架令人踏实。
    dudulangjiao
        38
    dudulangjiao  
       2019-07-28 01:46:09 +08:00 via iPhone
    2000 哥。。。
    arischow
        39
    arischow  
       2019-07-28 01:59:46 +08:00 via iPhone
    来自地板带着爱?
    linlance
        40
    linlance  
    OP
       2019-07-28 02:38:11 +08:00
    哎,简直气死。。。Django2.2.3 对 mysql 又只支持 5.6 以上的,弄了半天,累死我鸟。。。
    一堆一堆的错误,bug,真难用。
    哎,为了用户角色权限的便利,我还没有放弃。。。
    dcoder
        41
    dcoder  
       2019-07-28 08:15:28 +08:00
    @linlance
    Django 和 Rails 一般都推荐你用 PostgreSQL, 官配
    PostgreSQL 真心比 MySQL 强多了
    laravel
        42
    laravel  
       2019-07-28 09:22:12 +08:00
    @coolair 能问下你前端用的哪个框架吗?比如 layui、vue-element 等
    我好像有点儿处女座性格,代码写的不好我就想删了重写,UI 不好看我就不想用了。
    coolair
        43
    coolair  
       2019-07-28 10:07:48 +08:00
    @laravel 我自己实现了一个 theme 的功能,用了 adminlte、tabler、layui 三个,vue-element 还没弄,我对 vue 还不是很熟悉。
    ecloud
        44
    ecloud  
       2019-07-28 10:34:09 +08:00
    我有一套现成的 rabc 基于 tornado,可以共享给你,不过我不太清楚 tornado 跟 flask 有多大差别
    其实说白了 rabc 就是那几个表和每个 action 的验权,表都弄出来了,验权就是体力活了
    pzzrudlf
        45
    pzzrudlf  
       2019-07-28 11:24:55 +08:00 via Android
    @ecloud 兄弟,可否分享?
    sazima
        46
    sazima  
       2019-07-28 11:34:28 +08:00
    还是代码里控制角色权限吗, 比使用三方库灵活. 我猜的
    sazima
        47
    sazima  
       2019-07-28 11:34:49 +08:00
    错字: 还是代码里控制角色权限吧, 比使用三方库灵活. 我猜的
    firejoke
        48
    firejoke  
       2019-07-28 11:55:55 +08:00
    openstack  的权限管理组件 Keystone 就是用的 flask
    charlie21
        49
    charlie21  
       2019-07-28 12:00:16 +08:00
    @nine
    老手感觉踏实 新手就感觉不踏实,这不是 API caller 的廉价经验什么的能踏平的 这是必须知道底层原理(当发现 rails 源码出错的时候能 debug 进去)能踏平的
    imycc
        50
    imycc  
       2019-07-28 12:36:30 +08:00
    初学的时候用的 Django,工作后用的 Flask。因为我们是一个开发团队多个系统都在用,很少用它的插件,大多数公用的库或者服务,自己开发自己维护,定制起来也比较方便。
    而个人开发者的话,这些都要自己做了,开发多个的话可以考虑抽出来做个通用的轮子?
    ManjusakaL
        51
    ManjusakaL  
       2019-07-28 12:40:47 +08:00 via Android
    Flask 最后也会写成 Django on Flask 的
    charlie21
        52
    charlie21  
       2019-07-28 13:02:48 +08:00
    API caller 的经验对我来说没用,懂吗,设计 API 就是 软性药物 那就是贼船 。越高级的框架 整不明白就瞎 JB 用 刚用的时候很快乐 但最终都会影响到开发的流畅度
    qile1
        53
    qile1  
       2019-07-28 13:17:10 +08:00 via Android
    权限管理控制 5 张表太麻烦了,我是直接把每个 route 函数名存用户表的权限字段,验证的时候判断这个函数在不在权限字段,这样大到权限分组,或按角色,小到某个按钮的具体 post 或者 get、连数据库某个字段是否有权限修改都可以控制,就是现在还不知道使用蓝图后,如何把所有路由函数导出!都得手工加。
    Raisu
        54
    Raisu  
       2019-07-28 14:10:25 +08:00 via Android
    狗书拿来垫桌脚吧,这本书都不知道为什么评分那么高
    tairan2006
        55
    tairan2006  
       2019-07-28 16:32:53 +08:00
    RBAC 不就是几张表么。。有啥难的
    phithon
        56
    phithon  
       2019-07-28 16:50:08 +08:00
    你以为 flask 很轻量写起来很快,其实写完一整个系统就会发现你用的第三方库一样不比 django 少,质量还参差不齐。。。
    phithon
        57
    phithon  
       2019-07-28 16:52:13 +08:00
    django 与 pg 更配,别折腾 mysql 了
    ila
        58
    ila  
       2019-07-28 17:34:15 +08:00
    @niubee1
    没完整看 web 框架源码,不能自己实现 wsgi,对整个流程没有完全通彻。

    说的也是我
    Gakho
        59
    Gakho  
       2019-07-28 18:13:51 +08:00
    其实手撸也没多难,最近刚给 aiohttp 撸了个自用...
    niubee1
        60
    niubee1  
       2019-07-28 18:42:40 +08:00
    @ila 莫不是你不把 Linux 源码大全看完就在 linux 下没法写代码了? Windows 还没有源码的,你莫不是不能在 windows 下写代码?能不能在 web 框架基础上搞事情和看完源码有毛关系?
    linlance
        61
    linlance  
    OP
       2019-07-29 08:42:44 +08:00
    @ecloud 感谢。。tornado 又是新东西,哎,我想赶紧出成品。不然老在各种框架中跳来跳去。。

    @dcoder 万分感谢,一直都不知道 PQ 更合适,今天弄弄。。。
    linlance
        62
    linlance  
    OP
       2019-07-30 01:22:37 +08:00
    数据库换到 PostgreSQL 了,娘的,终于被 mysql 折磨的不行了。
    johnsona
        63
    johnsona  
       2020-05-21 16:27:22 +08:00
    phithon
        64
    phithon  
       2020-05-21 23:18:40 +08:00
    @jsisjs20130824

    原因是官方在 PG 上做了更多工作。官方文档这样解释:

    Django provides support for a number of data types which will only work with PostgreSQL. There is no fundamental reason why (for example) a contrib.mysql module does not exist, except that PostgreSQL has the richest feature set of the supported databases so its users have the most to gain.

    https://docs.djangoproject.com/en/3.0/ref/contrib/postgres/
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2544 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 10:20 · PVG 18:20 · LAX 02:20 · JFK 05:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.