Python中为什么放弃Flask转而使用Django,但我其实很喜欢Flask

反反复复的用 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 吧。。。基本上开箱即用。
Python中为什么放弃Flask转而使用Django,但我其实很喜欢Flask


65 回复

你应该来一个一劳永逸的解决办法,我就是自己写了套带 RBAC 的 Base 系统,公司所有的项目都基于它。后台界面靓丽,可定制程度高。


我理解你的纠结。Flask确实很优雅,但Django的“全家桶”特性在项目规模扩大时会带来明显优势。

主要考虑点:

  1. 内置功能:Django自带ORM、Admin后台、用户认证、表单处理等,这些在Flask中都需要额外集成
  2. 项目结构:Django有明确的项目/app结构,适合团队协作和大型项目
  3. 安全性:Django默认提供更多安全防护(CSRF、XSS防护等)
  4. 开发速度:对于标准CRUD应用,Django的开发速度更快

但如果你喜欢Flask的灵活性,可以考虑:

  • 继续用Flask,但采用更结构化的组织方式(Blueprints、工厂模式)
  • 只在需要Django特定功能(如Admin)的部分项目中使用Django
  • 使用Flask扩展来补充功能(Flask-SQLAlchemy、Flask-Login等)

总结:根据项目需求选择,小型/API项目用Flask,大型全栈应用用Django。

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

啥???这个有什么困难的

Django 我从 0.96 开始用,除了他的 mttv 范式现在有点不时髦,其他就没怎么烦恼过。flask 经常有这样那样的问题,主要是第三方的问题,但是也挺难受的。本来咱用 python 就是图方便,flask 适合将脚本输出服务,Django 适合快速搭建简单业务,但是项目一大型还是上工业级框架吧

python forever

工业级框架?
我感觉 Django 貌似已经可以搭建比较大的应用了呀。
不过我确实是觉得使用 python 就是图方便,Flask 需要自己弄来弄去,总会被各种小问题给折腾一整天,超级浪费时间。

你这个确实一劳永逸,但是自己能力不够,对 RBAC 的理解还不太明白,没有办法写出来,不然 Flask 也可以使用了,大部分功能其实都实现了。但是对用户和权限,角色,以前都没考虑,都是 admin 一个账户解决。
现在要考虑这部分内容了,觉得好麻烦,网上的教程也不是太清楚。。哎。
我在考虑使用 DRF 框架来解决这些事,如上所说的,使用 python 是为了方便,快速搭建系统出来,不想在细节上费时间。

我一直觉得 flask 适合写 api

初学者,觉得这个实在有点麻烦,起码建立 5 个表,还需要写模型吧?我都没想明白怎么实现这块。哎。。

我知道一个开源项目 lin-cms,在 github 上,他有后台就是用 flask 的。
权限管理做的也很齐全,算是一个比较好的脚手架吧。

对 flask 的确是很有好感,只是一些简单的接口用 flask。相对于 django 各有优势。看情况用吧

试试 laravel?

2000 哥?

大型项目还是要用 java 或 c#,python 的框架 django 是最强了,但是一庞大起来,或者业务复杂起来,每一次重构都是痛苦。

早用 Ruby on Rails 早超生,不然 3 年后回来发现还在纠结框架的事。

flask-security 可以自己改啊

最早放弃的东西,学习曲线太陡了。。。python 很容易出东西。

是我:)

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

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

自己改的难度有点大:(,弄了半天,业务逻辑都还没上呢,先被这些小坑给绊住了。

,你是之前 D 版的那位吗?

浏览器老得升级 java 插件是什么意思?

是的,一直在 D 版:)每天刷~~都忘记 coding 了,哈哈。

java 做的那些 B/S 产品,都有 java 虚拟机更新等等事情呀。经常有各种问题,在不同的电脑上。

本身就是小站点小页面用的,你要起大的肯定是更完备的酱狗啊

如果我没记错的话,16 进制权限值这个说法不是很对。根据经验来看,这个应该是 bitmap,应该转化为二进制来看,一个位代表一个权限。
一般我们配权限的时候都是采取位操作的方法,比如 0x01 | 0x02 来实现两个权限的并集。权限应该是写成常量,用的时候用按位取或(bitwise or)

权限你难道手打吗?????
你有没有考虑过 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;

#16 如果是个人项目或者小项目无所谓语言,一般团队项目还是 Java 为主,人力是重要因素

追随 2kg

哟 2k 哥

试试 flask-rbac

来自 d 版带着爱

工业级框架指的是?

别放弃,我还在玩呢

必然是完全不同的,除了 Rails 其他 web 框架都是在忙于配置,做些啰里啰嗦没用的事情,“看起来”很灵活,其实很狗屎。

WordPress 好了

ror 框架 隐藏的细节有点儿多呀,用起来不踏实,就像对着一个黑盒 ( rails SDK ) 编程

无数人写 PHP 都不爱用框架的

就因为框架隐藏的细节太多了

主要是楼主太弱鸡,遇到问题就想绕道,这样一直就会很弱, 没有别人的库连代码都不会写了

Java 做的 BS 和 Java 有什么关系? Java 虚拟机升级影响什么。。。?楼主完全没搞明白吧?

flask 隐藏了很多细节,但是确实隐藏的很精妙,django 则更直观。

looks like 吧?实际使用比任何其他框架令人踏实。

2000 哥。。。

来自地板带着爱?

哎,简直气死。。。Django2.2.3 对 mysql 又只支持 5.6 以上的,弄了半天,累死我鸟。。。
一堆一堆的错误,bug,真难用。
哎,为了用户角色权限的便利,我还没有放弃。。。


Django 和 Rails 一般都推荐你用 PostgreSQL, 官配
PostgreSQL 真心比 MySQL 强多了

能问下你前端用的哪个框架吗?比如 layui、vue-element 等
我好像有点儿处女座性格,代码写的不好我就想删了重写,UI 不好看我就不想用了。

我自己实现了一个 theme 的功能,用了 adminlte、tabler、layui 三个,vue-element 还没弄,我对 vue 还不是很熟悉。

我有一套现成的 rabc 基于 tornado,可以共享给你,不过我不太清楚 tornado 跟 flask 有多大差别
其实说白了 rabc 就是那几个表和每个 action 的验权,表都弄出来了,验权就是体力活了

兄弟,可否分享?

还是代码里控制角色权限吗, 比使用三方库灵活. 我猜的

错字: 还是代码里控制角色权限吧, 比使用三方库灵活. 我猜的

openstack  的权限管理组件 Keystone 就是用的 flask


老手感觉踏实 新手就感觉不踏实,这不是 API caller 的廉价经验什么的能踏平的 这是必须知道底层原理(当发现 rails 源码出错的时候能 debug 进去)能踏平的

初学的时候用的 Django,工作后用的 Flask。因为我们是一个开发团队多个系统都在用,很少用它的插件,大多数公用的库或者服务,自己开发自己维护,定制起来也比较方便。
而个人开发者的话,这些都要自己做了,开发多个的话可以考虑抽出来做个通用的轮子?

Flask 最后也会写成 Django on Flask 的

API caller 的经验对我来说没用,懂吗,设计 API 就是 软性药物 那就是贼船 。越高级的框架 整不明白就瞎 JB 用 刚用的时候很快乐 但最终都会影响到开发的流畅度

权限管理控制 5 张表太麻烦了,我是直接把每个 route 函数名存用户表的权限字段,验证的时候判断这个函数在不在权限字段,这样大到权限分组,或按角色,小到某个按钮的具体 post 或者 get、连数据库某个字段是否有权限修改都可以控制,就是现在还不知道使用蓝图后,如何把所有路由函数导出!都得手工加。

狗书拿来垫桌脚吧,这本书都不知道为什么评分那么高

RBAC 不就是几张表么。。有啥难的

你以为 flask 很轻量写起来很快,其实写完一整个系统就会发现你用的第三方库一样不比 django 少,质量还参差不齐。。。

django 与 pg 更配,别折腾 mysql 了


没完整看 web 框架源码,不能自己实现 wsgi,对整个流程没有完全通彻。

说的也是我

其实手撸也没多难,最近刚给 aiohttp 撸了个自用…

莫不是你不把 Linux 源码大全看完就在 linux 下没法写代码了? Windows 还没有源码的,你莫不是不能在 windows 下写代码?能不能在 web 框架基础上搞事情和看完源码有毛关系?

感谢。。tornado 又是新东西,哎,我想赶紧出成品。不然老在各种框架中跳来跳去。。

万分感谢,一直都不知道 PQ 更合适,今天弄弄。。。

数据库换到 PostgreSQL 了,娘的,终于被 mysql 折磨的不行了。



原因是官方在 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/

回到顶部