在谈Python中Django框架和Flask框架的区别之前,我们需要先探讨如下几个问题。

一、为什么要使用框架?

  • 为了更好地阐述这个问题,我们把开发一个应用的过程进行类比,往往开发一个应用(web应用、系统应用)跟建造房子的过程一样,需要先打地基,搭好骨架,然后一块砖一块砖叠上去。

  • 而开发一个应用呢?同样也需要一个好的架构设计,数据库建模,然后一个模块一个模块使用代码实现。

如果开发一个软件应用不使用框架,和我们建房子时,每一块砖、每一根钢筋都需要自己生产出来本质上是一样的。

显而易见,如果在建造房子之前,每一块砖头、每一种建材,都需要我们自己去生产的话,建造房子的效率是极低的,甚至可能一辈子也无法把房子建造好。

在开发应用系统时,使用框架可以带来如下好处

  • 大大提升开发效率

  • 让应用开发更加规范、拓展性更强

  • 让程序员把更多的精力放在业务逻辑的实现上,而不是重复、而复杂的基础环境上(比如web服务器、底层实现等)

二、为什么使用Django和Flask框架?

  • 在Python编程语言的世界里,功能最强大、最流行的两个框架。

  • 不仅在web后端开发、微服务开发,同时在ERP系统开发、API接口开发等领域,这两个框架应用非常广泛。

三、Django和Flask的区别

1.形象类比

如果Django类似于精装修的房子,自带豪华家具、非常齐全功能强大的家电,什么都有了,拎包入住即可,十分方便。

而Flask类似于毛坯房,自己想把房子装修成什么样自己找材料,买家具自己装。材料和家具种类非常丰富,并且都是现成免费的,直接拿过去用即可。

2.在体量上的区别

Flask:

  • 小巧、灵活,让程序员自己决定定制哪些功能,非常适用于小型网站。
  • 对于普通的工人来说将毛坯房装修为城市综合体还是很麻烦的,使用Flask来开发大型网站也一样,开发的难度较大,代码架构需要自己设计,开发成本取决于开发者的能力和经验。

Django:

  • 大而全,功能极其强大,是Python web框架的先驱,用户多,第三方库极其丰富。
  • 非常适合企业级网站的开发,但是对于小型的微服务来说,总有“杀鸡焉有宰牛刀”的感觉,体量较大,非常臃肿,定制化程度没有Flask高,也没有Flask那么灵活。

3.通过大数据统计分析

全球著名的stackshare网站对Django和Flask这两个框架的调查分析。

  • 从全球开发者关注程度上:Django为5.8K,Flask为3.31K

  • 从国外招聘网站岗位需求上:提到Django的有1.77K,Flask为942

  • 从著名的问答网站stack overflow提问数量上:Django 196K,Flask为27.6K

  • 从全球著名的代码托管平台上的star和fork数量上:Django分别为41.3K17.8K,Flask分别为43.8K12.3K

4.完成同样一个Hello World功能

使用Flask来完成:

  • 第一步,安装Flask,pip install flask

  • 第二步,创建my_first_app.py文件,添加如下代码

完成最简单的Hello World功能,Flask只需要7行代码,非常简单、方便。

使用Django来完成:

  • 第一步,安装Django,pip install django

  • 第二步,创建工程项目目录,django-admin startproject myproject

  • 第三步,创建子应用,python manage.py startapp myapp

  • 第四步,在myapp应用所在目录中的views.py文件中,添加如下代码

  • 第五步,在myapp应用所在目录中创建urls.py路由文件,并添加如下代码

  • 第六步,在主路由文件中添加路由。

从上面的操作步骤可知,实现同样的一个功能,往往Flask较为简单,代码较少,而Django所涉及到的流程较多,工程项目结构清晰,在大型项目中具有优势。

四、在实际工作中如何选择这两个框架呢?

  • 如果你想搞懂Python web开发WSGI协议原理以及实现过程、或者你想灵活定制组件,完全DIY你的应用、想实现微服务,那么建议你选择Flask。

  • 如果你关注产品的最终交付、想快速开发一个大的应用系统(比如新闻类网站、商城、ERP等),那么建议你选择Django,你想得到的功能它都有,想不到的功能它也有。

五、如何才能学好框架呢?

1.需要先学习框架的基础知识、基本实现原理。

2.结合项目实践,提升编码能力和业务逻辑的理解。

3.翻看框架源码,深入理解源码精髓。(进阶)

真正搞明白Python中Django和Flask框架的区别的更多相关文章

  1. 测试开发中Django和Flask框架

    Python测试开发中Django和Flask框架 为了更好地阐述这个问题,我们把开发一个应用的过程进行类比,往往开发一个应用(web应用.系统应用)跟建造房子的过程一样,需要先打地基,搭好骨架,然后 ...

  2. python中import和from...import...的区别

    python中import和from...import...的区别: 只用import时,如import xx,引入的xx是模块名,而不是模块内具体的类.函数.变量等成员,使用该模块的成员时需写成xx ...

  3. 转发 python中file和open有什么区别

    python中file和open有什么区别?2008-04-15 11:30地痞小流氓 | 分类:python | 浏览3426次python中file和open有什么区别?都是打开文件,说的越详细越 ...

  4. Python中str()与repr()函数的区别——repr() 的输出追求明确性,除了对象内容,还需要展示出对象的数据类型信息,适合开发和调试阶段使用

    Python中str()与repr()函数的区别 from:https://www.jianshu.com/p/2a41315ca47e 在 Python 中要将某一类型的变量或者常量转换为字符串对象 ...

  5. 干货福利:如何使用Python中Django模板?

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 穆胜亮 篇文章将学习如何使用Django模板.模板是在Django ...

  6. 一文搞懂Python中的所有数组数据类型

    关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...

  7. 三分钟搞定Python中的装饰器

    python的装饰器是python的特色高级功能之一,言简意赅得说,其作用是在不改变其原有函数和类的定义的基础上,给他们增添新的功能. 装饰器存在的意义是什么呢?我们知道,在python中函数可以调用 ...

  8. 天啦噜!仅仅5张图,彻底搞懂Python中的深浅拷贝

    Python中的深浅拷贝 在讲深浅拷贝之前,我们先重温一下 is 和==的区别. 在判断对象是否相等比较的时候我们可以用is 和 == is:比较两个对象的引用是否相同,即 它们的id 是否一样 == ...

  9. 简述Python中的break和continue的区别

    众所周知在Python中,break是结束整个循环体,而continue则是结束本次循环再继续循环. 但是作为一个新手的你,还是不明白它们的区别,这里用一个生动的例子说明它们的区别,如下: 1.con ...

随机推荐

  1. java多线程模拟龟兔赛跑

    让乌龟和兔子在同一个赛道从1开始跑到100,看看谁更快. public class Racer implements Runnable{ private static String winner;// ...

  2. 《windows核心编程系列》十五谈谈windows线程栈

    谈谈windows线程栈. 当系统创建线程时会为线程预订一块地址空间区域,注意仅仅是预订.默认情况下预定的这块区域的大小是1MB,虽然预订这么多,但是系统并不会给全部区域调拨物理存储器.默认情况下,仅 ...

  3. C plus plus sprintf用法

    sprintf int sprintf ( char * str, const char * format, ... ); Write formatted data to string Compose ...

  4. ACM经历与感悟合集

    ACM经历与感悟合集 ACM起步要点总结(转哈工大) ACM 荣耀之路-学习方法 ACM感悟 一位ACMer过来人的心得 ACM经历总结 大学ACM的总结 ACM大牛的退役贴 各大牛退役总结帖 女生应 ...

  5. robot framework 入门

    obot framework 入门 2012-12-23 12:47:16 分类: LINUX     其实我不喜欢动不动就框架,动不动就架构,整出一坨专业术语搞的玄而又玄,让人云山雾绕,我想做的事情 ...

  6. Android开发学习——开发调试工具-DDMS应用,ADB进程,Logcat,Eclipse Debug调试

    DDMS --  Dalvik debug monitor service    调试监控服务 对模拟器进行相关配置. ADB进程   Android debug bridge  建立eclipse和 ...

  7. AJPFX关于this用法和注意事项

    this:代表对象.就是所在函数所属对象的引用.哪个对象调用了this所在的函数,this就代表哪个对象,就是哪个对象的引用.开发时在定义功能时,如果该功能内部使用到了调用该功能的对象,这时就用thi ...

  8. AJPFX对equals()方法和==异同的比较

    equals()方法是Object类的方法,所有的类都集成了此方法,还有部分类重写了这个方法,我们看一下Object类中关于该方法的的源码: public boolean equals(Object ...

  9. swiper4实现的拥有header和footer的全屏滚动demo/swiper fullpage footer

    用swiper4实现的拥有header和footer的全屏滚动demo, <!DOCTYPE html> <html lang="en"> <head ...

  10. 快速排序算法原理及其js实现

    要说快排的原理,通俗点说就是把一个事情,分成很多小事情来处理,分治的思想. 假设我们现在对“6  1  2 7  9  3  4  5 10  8”这10个数进行排序.首先在这个序列中随便找一个数作为 ...