Flask 只好放弃了, Django 拿起。。。其实我很喜欢 Flask。。。 - V2EX
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 9885 次点击
    这是一个创建于 2268 天前的主题,其中的信息可能已经有所发展或是发生改变。
    反反复复的用 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  
    PRO
       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  
       201907-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 此话何解 t/586734
    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     Solana     2604 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 05:16 PVG 13:16 LAX 22:16 JFK 01:16
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86