django的优缺点(非原创)
Django 大包大揽,用它来快速开发一些 Web 应用是不错的。如果你顺着 Django 的设计哲学来,你会觉得 Django 很好用,越用越顺手;相反,你如果不能融入或接受 Django 的设计哲学,你用 Django 一定会很痛苦,趁早放弃的好。所以说在有些人眼里 Django 无异于仙丹, 但对有一些人来说它又是毒药且剧毒。
先说缺点:
- 系统紧耦合,如果你觉得 Django 内置的某项功能不是很好,想用喜欢的第三方库来代替是很难的,比如下面将要说的 ORM、Template。要在 Django 里用 SQLAlchemy 或 Mako 几乎是不可能,即使打了一些补丁用上了也会让你觉得非常非常别扭。
- Django 自带的 ORM 远不如 SQLAlchemy 强大,除了在 Django 这一亩三分地,SQLAlchemy 是 Python 世界里事实上的 ORM 标准,其它框架都支持 SQLAlchemy 了,唯独 Django 仍然坚持自己的那一套。Django 的开发人员对 SQLAlchemy 的支持也是有过讨论和尝试的,不过最终还是放弃了,估计是代价太高且跟 Django 其它的模块很难合到一块。
- Template 功能比较弱,不能插入 Python 代码,要写复杂一点的逻辑需要另外用 Python 实现 Tag 或 Filter。
- 让人纠结的 auth 模块,Django 的 auth 跟其它模块结合紧密,功能也挺强的,就是做的有点过了,用户的数据库 schema 都给你定好了,这样问题就来了,比如很多网站要求 email 地址唯一,可 schema 里这个字段的值不是唯一的,纠结是必须的了。
- 核心开发团队似乎比较顽固,除了说第三方库难使用,据说历史上 ORM API 繁琐(后来按 ActiveRecord 风格重写),曾经对 ajax 热潮也不怎么当回事。
- 周边资源不够发达,其实说来说去有些相关,这个是第三方库比较难融合相关的,没有很好的插件体系。虽然官方文档还不错,但是相关书籍很资料相比 rails 等并不多。
- 早前有说没有结合测试框架,最新的 1.5 肯定是有了。不过个人判断又是反应迟钝的一个表现。不过个人也不喜欢测试太重,这点跟作者想法比较一致。
再来看看一些优点:
- 自助管理后台,admin interface 是Django 里比较吸引眼球的一项 contrib,让你几乎不用写一行代码就拥有一个完整的后台管理界面。
- 虽然 Django 自带的 ORM 不如 SQLAlchemy 强大,但也不弱。一般来说可以不怎么使用 SQL 语句,每条记录都是一个对象,而取对象的关联,易如反掌。
- URL design,Django 的 url 模块设计得看似很复杂,都是使用正则表达式,但真正用到的都是很简单的正则,等你用到一定程度的时候,发现这块东西,做的很细致,地址的表达上,你可以随心所欲,那些优美的,简洁的,专业的地址,不管哪种,你都能表现出来。
- Django 的 App 理念很好。App 可插拔,是不可多得的思想。不需要了,可以直接删除,对系统影响不大。
- Django 的错误提示做的足够详细了,我有时喜欢上 Django 的出错页面了,那页面先不说有多详细,但光页面的美观上就是一种享受。有时,Django 的错误提示信息,让你马上就能知道在那个页面哪行代码出错了。
django的优缺点(非原创)的更多相关文章
- 老男孩Django笔记(非原创)
.WEB框架 MVC Model View Controller 数据库 模板文件 业务处理 MTV Model Template View 数据库 模板文件 业务处理 ############## ...
- Linux下high CPU分析心得【非原创】
非原创,搬运至此以作笔记, 原地址:http://www.cnitblog.com/houcy/archive/2012/11/28/86801.html 1.用top命令查看哪个进程占用CPU高ga ...
- CSS样式命名整理(非原创)
非原创,具体出自哪里忘了,如果侵害您的利益,请联系我. CSS样式命名整理 页面结构 容器: container/wrap 整体宽度:wrapper 页头:header 内容:content 页面主体 ...
- 非原创。使用ajax加载控件
非原创.来自博客园老赵. public class ViewManager<T> where T : System.Web.UI.UserControl { private System. ...
- Java 表达式解析(非原创)
因项目需要,在网上找来一套表达式解析方法,由于原来的方法太过于零散,不利于移植,现在整理在同一文件内: 文件中包含5个内部类,源码如下: import java.util.ArrayList; imp ...
- Java Interface 是常量存放的最佳地点吗?(转帖学习,非原创)
Java Interface 是常量存放的最佳地点吗?(转帖学习,非原创) 由于java interface中声明的字段在编译时会自动加上static final的修饰符,即声明为常量.因而inter ...
- 用RD,GR,BL三个方法内代码生成一张图片(非原创,我只是完整了代码)
我公开以下图片的源代码,,是ppm格式的,,自己找到能打开的工具.. (非原创,我加工的代码,可直接执行运行输出,缩略图能看到效果) 这是原博客 http://news.cnblogs.com/n/ ...
- tp5.1 phpspreadsheet- 工具类 导入导出(整合优化,非原创,抄一抄,加了一些自己的东西,)
phpspreadsheet-工具类 导入导出(整合优化,非原创,抄一抄,加了一些自己的东西)1. composer require phpoffice/phpspreadsheet2. 看最下面的两 ...
- Vue 仿QQ左滑删除功能(非原创)
非原创,摘选来源:http://www.jb51.net/article/136221.htm. 废话不多说,相当实用,先记录. Html代码: <div class="contain ...
- 【非原创】LightOJ - 1284 Lights inside 3D Grid【概率期望】
学习博客: 戳这里 戳这里 戳这里 戳这里 题意: 在一个三维的空间,每个点都有一盏灯,开始全是关的, 现在每次随机选两个点,把两个点之间的全部点,开关都按一遍:问k次过后开着的灯的期望数量: 题解: ...
随机推荐
- [记录] Ubuntu 配置Apache虚拟站点
版本 Ubuntu 16.04 1 . 首先找到Apapche配置文件夹 /etc/apache2/ apache2.conf conf-enabled magic mods-enabled sit ...
- Oracle查询表结果添加到另一张表中
转自:https://blog.csdn.net/lx870576109/article/details/78336695 把每一个知识点进行积累:Oracle数据库中将查询一张表的结果添加到另一张表 ...
- FDQuery多表更新生成sql语句的问题
query.sql='select a,b,c,d,e from a,b,c where ....'; 来源3个表, 设计时添加字段列表,每个字段有Origin属性 分别是a.a,b.b,c.c格式 ...
- gitlab入门
目录 git下载 注册ssh git客户端及图形化工具tortoisegit下载: git客户端安装: https://git-scm.com/download (git客户端 此种需要命令行执行 ...
- 原生java读取存储为xml格式的数据,并存储到java bean里
一.举例读取的文件为:X-bond可交易债券信息_20180917.xml <?xml version="1.0" encoding="UTF-8"?&g ...
- python语言中的函数装饰器
装饰器 什么是装饰器? 装饰:给已有的对象(函数)添加新的功能 器:工具 在python中指具备某些功能的函数 装饰器:装饰器就是一个给其他函数增加功能的函数 一种设计原则: ...
- 从初始化列表和构造函数谈C++的初始化机制
来源:http://blog.csdn.net/theprinceofelf/article/details/20057359 前段时间被人问及“初始化列表和构造有什么区别?”我竟一时语塞,只好回头 ...
- Python调用外部系统命令
利用Python调用外部系统命令的方法可以提高编码效率.调用外部系统命令完成后可以通过获取命令执行返回结果码.执行的输出结果进行进一步的处理.本文主要描述Python常见的调用外部系统命令的方法,包括 ...
- python小实例一:简单爬虫
本文所谓的爬虫就是通过本地远程访问url,然后将url的读成源代码形式,然后对源代码进行解析,获取自己需要的数据,相当于简单数据挖掘.本文实现的是将一个网页的图片爬出保存到本地的过程,例子很简单,用的 ...
- python判断任务是CPU密集型还是IO密集型
目前已经知道,在需要并发执行任务的时候,需要使用多线程或者多进程;如果是IO密集型任务,使用多线程,如果是CPU密集型任务,使用多进程;但问题是,经常我们会遇到一种情况就是:需要被执行的任务既有IO操 ...