python django框架 比php_ThinkPHP, Django这两个框架孰优孰略,忽略语言本身?
你问 ThinkPHP 适不适合(零基础)速成找工作,没问题;你问 ThinkPHP “好不好”,也就算了。和 Django 对比,还有人觉得 ThinkPHP 好,我真的要出来说一句了—— 技术角度上,ThinkPHP 无论如何也配不上和 Django 对比。
ThinkPHP 的代码质量非常一般,风格尤其糟糕——大量单字母命名、全局函数、全局变量(还有组合体——单字母全局函数)、滥用 GET / POST 数组……比如想象一下表单里用了个单字母的key(出于混淆或压缩 URL 的目的),结果行为莫名其妙,最后发现这玩意儿竟然是框架默认的全局 GET 参数之一……最关键的是,这些还是他们引以为豪的特性!暴露给开发者的公开接口都这样了,框架内部就更不用说——随处可见“缩行”神技、没有统一的代码规范、对 PHP 的类型转换带来的坑不注意规避……
安全方面也尤为堪忧。且不说编码质量导致的细节漏洞,整个 SQL query builder 的设计简直令人吓掉下巴!最早我也没关注,还觉得作为一个现代框架(ThinkPHP 3.X),善用 prepared statement 、 parameterized query 应该是基本的,有可能的话还应该做好类型绑定(尤其在动态语言里),然而……直到我看到乌云上接二连三的爆出 ThinkPHP 的 SQL 注入漏洞(现在应该有很多都已经公开细节了,可以自己去搜搜看),修了一个甚至还间接导致 regression 出了个新的,觉得一个框架怎么这么容易被注入,我才去看了一眼那几个修复的 patch 以及整个 SQL 子系统,吓得我……官方甚至还有过类似“就是这么设计的”、应该开发者自己应对的回应——这话很多时候是对的,但我可一点也不觉得传任何值给 query builder (而且也没有强制使用“unsafe”之类的功能)导致注入是开发者应该应对的问题……
说到了 regression ,也就不得不提最关键的一点——测试在哪里?反正我是一点也不敢使用一个这么庞大却没有单元测试的框架的……( Knuth 的 TeX 都有测试呢……又不是编程之禅里的“大师”……)
另外有一个可以讨论的问题——升级。我是做过从 ThinkPHP 1.X 升到 2.X 再升到 3.X 的事情的。接口、行为甚至整个结构、模型都会变化,还记得升级文档是一份不厚的PDF,有很多细节没有完全覆盖到。和 Django 对比,即使是 Django 早期变化比较大的时期,也没觉得升级这么痛苦,大部分时候还会提前几个版本给 deprecated 警报……更不用说 Django 最近很长一段时间的升级都比较平滑了,这也和其架构合理有关。当然你也可以支持这种破坏性比较大的升级,前提是你愿意花时间跟进大版本,否则老版本最后总是会没有安全支持的——看看现在多少旧版本的 ThinkPHP 站点被脚本小子拿来玩?
ThinkPHP 也是有“优势”的,从上至下全中文——注释、commit message、文档、社区……真的几乎一句英文也没有(当然抛开代码),想要也没有,扫清了需要学英语这一大障碍。
我认为,只有出于历史原因被迫(虽然这种情况下我强烈建议换工作)或者技校速成,其他情况下别碰这个大坑。讨论“框架优劣”的话,也是 Laravel、Symfony 之类的 vs Django 更有意义。
Update (a.k.a. off-topic):
有不少人提到 CodeIgniter ,也是我用过的第一个框架,同时也是我读过的代码比例最高的一个PHP框架。中肯地说 CodeIgniter 的设计、架构乃至代码质量都是不错的,文档也很易懂。不过不论如何 CodeIgniter 的定位和 ThinkPHP 这类完全不同,就是一个轻量级的框架,最重要的区别之一在于数据层抽象非常简单。更不幸的是其开发停滞了很长一段时间,尤其是在 PHP 5.3 之后没能跟上(不但没有使用新特性,而且还存在兼容问题)……不推荐在新项目中使用 2.x 的 CodeIgniter ( PHP 5.3 之后有太多重要的新特性了)。至于前段时间 CodeIgniter 转让给了我这儿的一所 college (BCIT)来维护,推出了 3.x 版,没有用过就不评论了。
还有一个曾经很喜欢的框架是 CakePHP ,代码规范、测试完整、团队活跃,很喜欢它的数据模型,算是少数几个 ORM 做得不错的 PHP 框架了,调试功能也很强大,再加上自动生成代码和数据库等“scaffolding”功能,可以说是比较接近 Django 。然而可惜的是,我最喜欢的 data model 部分在 2.x 版本的实现有问题——历史包袱沉重、逻辑过度复杂,导致在极端情况下(例如复杂的层叠、链接)出现 bug ,而且很难修;我花过时间查 bug 、试图修复、也和 CakePHP 团队讨论了,最后认为很难在不破坏兼容性的情况下完全修复,所以留在了 3.x 版本里重构整个 data model 系统。如今 3.0 好像已经出来了,不过我仍然没用过……
Laravel 太新、 Symfony 太重,所以这两个其实我也是没用过的;Yaf 完全就是不同的方向了。
python django框架 比php_ThinkPHP, Django这两个框架孰优孰略,忽略语言本身?相关推荐
- 实时流处理框架Storm、Spark Streaming、Samza、Flink,孰优孰劣?!
https://mp.weixin.qq.com/s?__biz=MzU1NDA4NjU2MA==&mid=2247486490&idx=1&sn=e25a05be8cf98c ...
- Node.js VS Python:孰优孰劣?
转载自品略图书馆 http://www.pinlue.com/article/2020/07/2814/1111088479253.html 导读:人们可能会在Node.js和Python之间选择时感 ...
- 3dmax和python哪个好学_3Dmax和Maya孰优孰劣?初学者入门该如何选择?
大家好,本人次时代游戏建模师一枚.入坑游戏建模已经有三年之久了,也算是小有经验,今天在这里给大家分享一些游戏建模的知识.如果觉得我的分享对你有帮助可以关注UP主,加我企鹅号前三位142,中间四位644 ...
- SAP BOPF和ESF2这两个框架有什么区别
SAP社区上有这样一个讨论帖子: BOPF和ESF2 的区别? https://archive.sap.com/discussions/thread/3602400 BOPF全称: 可以看下这位SAP ...
- python框架django的使用_Django框架的基本使用,若依框架
Django框架的基本使用,若依框架 Django框架的基本使用 Django是一个功能强大的web框架 框架模式 1.MVC和MTV框架 MVC:Web服务器开发领域里著名的MVC模式,所谓MVC就 ...
- Python框架篇之Django(Django项目搭建全过程、Web框架与Django)
文章目录 一.Web框架与Django本质 二.从安装到实现一个完整的Django项目 一.Web框架与Django本质 1.Web框架的理解 框架,特指为解决一个开放性问题而设计的具有一定约束性的支 ...
- python学习第八天---用Django框架创建可重用注册登录系统
python学习第八天---用Django框架创建可重用注册登录系统 实现的功能 项目开始前的整体规划 搭建环境完成基础配置 创建app 更改语言和时区 数据库表生成 启动开发服务器 浏览器访问,检测 ...
- 【Python/Web】Django(一)Django框架的配置和使用
序章 Python下面有许多受欢迎的web框架,例如Flask.Twisted等,Django也不例外.许多成功的网站都是基于Django,Django作为一个开源的Web应用框架,采用了 MVT 的 ...
- python开源项目框架二次开发_Python中三大框架各自的应用场景(DJango,flask,Tornado)...
django:主要是用来搞快速开发的,他的亮点就是快速开发,节约成本,正常的并发量不过10000,如果要实现高并发的话,就要对django进行二次开发,比如把整个笨重的框架给拆掉,自己写socket实 ...
最新文章
- 未来一年最有可能成为独角兽的29家美国初创公司
- JWT简介json web token bear token
- git删除远程已经没有的分支
- Oracle 制造死锁和查询死锁
- golang 数组组合成最小的整数_golang数组-----寻找数组中缺失的整数方法
- 光耦在短距离通信中的应用
- Java操作某方法时报错:java.lang.NoSuchMethodError
- 常用文本编辑器 editor 的常用插件 —— CopyEdit
- jQuery实现一个简单的选项卡效果
- 用u盘安装mysql,奥维互动地图企业服务器基本环境安装 ——U盘引导安装CentOS 6.5...
- 在IDEA中如何使用eclipse快捷键
- 微信小程序 audio 音频 组件
- laravel 软删除
- 【JZOJ 3397】雨天的尾巴
- js处理null和underfined
- springcontext.xml 中方言是红色的_12种方言都能听懂!讯飞智能录音笔A1评测:小如钥匙坠+复古磁带造型...
- SQL中modify和alter用法区别
- mysql存储函数中游标报错 No data - zero rows fetched, selected
- 批量删除github工程仓库的办法
- 塔望3W消费战略全案|牛小范:即食牛排如何打造品牌「高级感」