python web论坛_Python 有哪些好的 Web 框架?

只推荐 Flask/Django 顺便 从整体设计,路由设计,应用模块化设计,配置等方面比较一下这两个框架2019 年 4 月 23 日,我来更新一下

请允许我慢慢道来。目录如下

一、整体设计 : section

二、路由设计 : section

三、应用模块化 : section

四、配置 : section

五、文档 : section

六、社区 : section

▼ 七、对 Django 的误解 : section

误解 1. Django 应用比 Flask 应用重 : section

误解 2. Flask 代码比 Django 代码优雅 : section

误解 3. Django 不容易扩展 : section

八、对新手的建议 : section

直观感受是:Flask 讲究的是 less is more

Django 讲究的是 more is less

一、整体设计Flask 怎么定位自己的?

将自己定位为微框架。啥叫微框架,就是毛坯房的意思。给你个毛胚房,你自己装修去。Django 怎么定位标榜自己的?

划重点 The web framework for perfectionists with deadlines. 完美主义者的 Deadline 终结框架

定位不同,就会导致设计上和功能上的倾向性。

假如你和我一样是先用 Django 这种给你准备了大量方便工具的框架。当你切换到 Flask 的时候,明显会感觉到的问题是:不但失去了铠甲,还多了很多根软肋。表单怎么解决?Django Form 很好用呀。

跨站攻击? Django 帮你做了 csrftoken

登陆认证鉴权怎么搞定? Django 自带了 backend 和 auth 模块。

ORM 怎么挑选?Django ORM 很好用。

DBMigration 怎么做? Django Migration 了解一些?

缓存怎么做? Django Cache 了解一下?

其他...

Flask 只是一个微框架。要做你自己组装去。表单怎么解决? 从社区找了个 Flask-Form?

跨站攻击? 社区 Flask-Form 帮你做了。

登陆认证鉴权怎么搞定? 自己写 User 模块。

ORM 怎么挑选?flask-sqlalchemy 自己组装一下。等等 SQLAlchemy 是什么玩意? query 语法写起来怎么这么原始...

DBMigration 怎么做? Alembic 配合 SQLAlchemy, 等等,SQLAlchemy?? Alembic

缓存怎么做? 自己手动封装一下 RedisPy

其他...

当然,我并不是在否定 Flask, 功能少某种程度上不是框架的缺点,而是使用者的缺点。笑....如果你说 Flask 是轻量级的,是方便扩展的,那是你是对的。

如果你说 Flask 应用是轻量级的,那我可能就要强行杠你一波了。 Flask-Form / Flask-AUTH / SQLAlchemy / Alembic / werkzeug ....

如果你是进阶的玩家,你可能更喜欢 DIY 一些

二、路由设计

路由设计上,从使用者的角度来说,更喜欢 Flask 一些,因为可以随用随定义。

from flask import Flask

app = Flask(__name__)

@app.route('/') # 不使用蓝图

def hello():

return 'Hello, World!'

bp = CustomBlueprint("user", __name__, url_prefix="/user")

@bp.get('/') # 使用自定义的蓝图

def hello_bp()

return 'Hello bp'

Flask 可以依据蓝图注册不同 errorhandler/beforerequest 等钩子 这确实超级方便

Django 就没那么灵活了。但通过 middleware 也能做

代码组织的好的话,两者差距不是很大。

三、应用模块化

假设我设计一个应用叫做 shamate, 这个应用可能要对接多方面接口:企业端

用户端

Admin 端

使用 flask 的时候,一个这样的应用,文件结构应该是这样的。

shamate

apps # 通过 blueprint 切分模块

company

views.py

user

views.py

admin

views.py

models

service

tasks.py

__init__.py

app.py

db.py

helpers.py

settings.py

worker.py

嗯,被老大 Flask 大牛带了一段时间之后,切分 django 是这么切分的em..... 非常的 flasky

shamate

core

auth.py

db.py

tasks.py

models.py

company # 通过 django app 切分模块

view.py

urls.py

user

store

__init__.py

celery.py

logging.py

m.py

settings.py

urls.py

wsgi.py

需要注意的是,Django 的在 Models 里面设置的时候务必显式写上 table 名

class Order(Model):

# your fields

class Meta:

db_table = "order"

Django 模块如果涉及到业务的 Model, 一般很难通用,但如果要写通用的 Tag 系统 Attachment 系统,则,一般性能可能不太跟得上。如果不在意性能的话,建议 Folk 一份开源库,方便后期修改。

四、配置

参考上面的结构,你应该能看出来,配置其实相差不是很大。主要区分 local/stage/test/prod 环境即可。

五、文档

Django 是看了文档就能撸一个不错的项目出来。在不断学习的过程中,参考社区最佳实践。慢慢的撸一套自己的标准。

Flask 则是...... 需要更多的参考社区最佳实践。

六、社区

扩展都挺多的。但建议涉及到业务逻辑的扩展,直接 cv 到项目中。这样方便后期定制。

Django 社区里面东西满多的, 举个例子, 我的文章里介绍过无与童比:这几招,让你快速提升 Python 项目的性能​zhuanlan.zhihu.comv2-761d4fd04def1b51842cda6d0424ad9e_180x120.jpg

在使用 Django 项目的时候,我必须要安装的第三方库就是 djangodebugtools

这个工具用起来有多舒服呢?

可以直接 Profile SQL 语句

甚至可以直接 explain sql 以及 查看缓存情况

这方面的话, 推荐两本书,他们推荐的第三方库都是不错的.《Django 企业开发》这本书是国人写的, 特别推荐一下 @胡阳

《Two Scoops of Django》

至于 Flask 则推荐官方的链接Flask (A Python Microframework)​flask.pocoo.org

包含了社区质量相对高的包.

比如 Form的处理/Admin的处理/ORM/Alembic/RateLimit/Redis等等.

七、对 Django 的误解

误解 1. Django 应用比 Flask 应用重

实际上不然,我接触的 Flask 项目都写成了自己的一套标准。表单怎么解决?自己搞一套 Form 标准

登陆认证鉴权怎么搞定? 自己写 User 模块。

ORM 怎么挑选?定制 flask-sqlalchemy

DBMigration 怎么做? Alembic 配合 SQLAlchemy,

缓存怎么做? 自己手动封装

其他...

最后你发现你学的东西一点都没比 Django 少到哪里去。

误解 2. Flask 代码比 Django 代码优雅对的,代码少自然优雅.....

误解 3. Django 不容易扩展

Django 没那么难扩展。你说,我不想用 template, 我想 直接开接口 Rest 一波流。DjangoRestFramework 满 足你的要求。

你说,我的用户系统比较复杂,我不想用 Auth 模块,你直接定义 User/Company/AdminStaff 即可。

你说,admin 模块很难用,但讲真的,admin 模块适合人手不足的情况下快速怼界面,快 速验证自己的设计思路。国人出的 xadmin 也是不错的。

Django 不 Scale, 缓存做好了么?查询优化了么?分库分表了么?MQ 做了么?如果这还不够的话,确实应该开开心心的招人换语言和框架了。

Django 很重.... 然而,你学完一套 Flask 的整个体系之后,发现一点都没比 Django 少学什么。但一定会发现你在找文档上面确实花费了不少的时间。

八、对新手的建议

都学,先 Django, 后 Flask

理由是,通过 Django 可以以最小成本的了解 Web 开发的点点滴滴,然后看工作项目是啥就认真研究啥。

之前觉得Django写起来很快的, 但被TL带了一段时间之后, 发现TL也能把flask app写的很快, 这还是取决于使用者的.

当然,如果有兴趣的话,可以通过我在专栏写的 Django 的文章来做个实战项目了解 Django 开发的点点滴滴无与童比:2018 年不容错过的 Django 全栈项目 YaDjangoBlog​zhuanlan.zhihu.comv2-28ec23ecc30481cd55ffdb7a1103f66a_180x120.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值