收藏量4w+的Web开发框架,你还没学?点击收藏!

Python的Web开发,也是工作岗位比较多的领域。如果你对Python的Web开发有兴趣,正打算开始学习使用Python做Web开发等,那么学习一门基于Python的Web开发框架是必修课。

 

Python作为当前最热门,也是最主要的Web开发语言之一,在其二十多年的历史中出现了数十种Web框架,比如Django、Tornado和Flask等,它们有的历史悠久,有的发展迅速,还有的已经停止维护。

 

一、基于Python的代表性Web框架

 

下面是一些比较有代表性的框架:

Django:

Python 界最全能的 Web 开发框架,battery-include 各种功能完备,可维护性和开发速度一级棒。常有人说 Django 慢,其实主要慢在 Django ORM 与数据库的交互上,所以是否选用 Django,取决于项目对数据库交互的要求以及各种优化。而对于 Django 的同步特性导致吞吐量小的问题,其实可以通过 Celery 等解决,倒不是一个根本问题。Django 的项目代表:Instagram,Guardian。

 

Tornado:

天生异步,性能强悍是 Tornado 的名片,然而 Tornado 相比 Django 是较为原始的框架,诸多内容需要自己去处理。当然,随着项目越来越大,框架能够提供的功能占比越来越小,更多的内容需要团队自己去实现,而大项目往往需要性能的保证,这时候 Tornado 就是比较好的选择。Tornado项目代表:知乎。

 

Flask:

微框架的典范,号称 Python 代码写得最好的项目之一。Flask 的灵活性,也是双刃剑:能用好 Flask 的,可以做成 Pinterest,用不好就是灾难(显然对任何框架都是这样)。Flask 虽然是微框架,但是也可以做成规模化的 Flask。加上 Flask 可以自由选择自己的数据库交互组件(通常是 Flask-SQLAlchemy),而且加上 celery +redis 等异步特性以后,Flask 的性能相对 Tornado 也不逞多让,也许Flask 的灵活性可能是某些团队更需要的。

 

二、选择框架的建议

 

这么多的Web框架,我们没有那么多的精力全都学一遍,也不可能全部精通,必然要有所取舍,那么该如何选择呢?有哪些可以参考的原则呢?

 

下面的建议不一定正确,但可以作为参考:

 

选择更主流的框架。因为它们的文档更齐全,技术积累更多,社区更繁盛,能得到更好的帮助和支持。

 

选择更活跃的框架。关注项目在GitHub等环境中的更新频率、Issue和Pull Request的响应情况。如果一个项目长期没有更新,或者有一堆的问题需要解决但是没有得到响应,就不应该是你学习的对象。

 

选择能够满足需求的框架。没有最好的框架,只有更合适的框架。你所选择的Web框架不仅需要满足当前的需求,还要充分考虑项目发展一段时间后的情况,即前瞻性,避免盲目选择而导致将来推倒重来的情况。

 

选择时效性好的框架。在学习和使用框架的时候经常需要查阅和参考各种网络上的文章、博客和教程,但是需要注意他们的发表时间。有些框架的相关文章已经很老了,很久没更新了,应该放弃这种框架;有的框架一直以来都有不断的新文章、新博客出现,就是比较不错的选择。

 

选择入门友好的框架。这条只对新手适用。详细的框架文档、官方教程对新手来说都是极大的帮助和鼓励。

 

三、为什么推荐Django框架?

 

Django具有以下特点:

 

功能完善、要素齐全:该有的、可以没有的都有,自带大量常用工具和框架,无须你自定义、组合、增删及修改。

 

完善的文档:经过十多年的发展和完善,Django有广泛的实践案例和完善的在线文档。开发者遇到问题时可以搜索在线文档寻求解决方案。

 

强大的数据库访问组件:Django的Model层自带数据库ORM组件,使得开发者无须学习其他数据库访问技术(SQL、pymysql、SQLALchemy等)。

 

灵活的URL映射:Django使用正则表达式管理URL映射,灵活性高。新版的2.0,进一步提高了URL编写的优雅性。

 

丰富的Template模板语言:类似jinjia模板语言,不但原生功能丰富,还可以自定义模板标签,并且与其ORM的用法非常相似。

 

自带后台管理系统admin:只需要通过简单的几行配置和代码就可以实现一个完整的后台数据管理控制平台。

 

完整的错误信息提示:在开发调试过程中如果出现运行错误或者异常,Django可以提供非常完整的错误信息帮助定位问题。

 

那么,我们根据前面的选择原则我们来逐条对比一下:

 

1.主流、活跃程度:

从Github的数据来看,Django的开发非常活跃,迭代速度也非常快。

 

2.是否可以满足需求:

Django以要素齐全、工具丰富、框架庞大著称,基本上别的框架有的它有,别的框架没有的它也有,如果Django满足不了需求,那么别的框架同样也一样。

 

3.时效性:

Django有很长的开发和实践过程,或早或晚的文档、教程、帮助、博客等等非常多,资料更新速度也很快,比如博主个人网站的Django教程,大家没事可以逛逛。

 

4.入门友好程度:

一个框架能否流行起来,对新手入门是否友好非常关键。Django在这一点做的非常好。

 

- END -

 

想要一试身手?

以一个垃圾分类论坛网站为例,

带领大家快速入门Django框架。

 

【Django搭建垃圾分类论坛】

完整视频:http://yun.itheima.com/open/443.html?2005stt
配套资料:https://pan.baidu.com/s/1s5YGiVFbUnJDWw3sUq8OJA 提取码:35k4 

主讲内容:

1.Django框架的MVT流程。

2.Django的视图。

3.Django的MRO模型。

4.Django的模板渲染。

5.Django的后台管理功能。

热门文章

暂无图片
编程学习 ·

mysql8 windows版密码忘记如何重新设置?

本机安装位置:D:\Program Files (x86)\java\mysql-8.0.13-winx64重设密码具体过程:还好有一个navicat的连接可以打开,查看其中的用户名和主机名称(一般默认是这个,改了又忘了的话我也没办法了)打开cmd,用管理员的身份运行,先关闭mysql(net stop mysql);然后进入mysql8所…
暂无图片
编程学习 ·

springboot+idea+bootstrap的带有图片的表格编辑操作

前面已经写了 批量导入,图片显示,现在写的是批量修改,后面会写用echarts+springboot 做折线图,有时间贴上 1、jsp代码如下,编辑按钮formatter: function (value, row, index) {var edit = <input class="btn btn-primary" type="button" value=&qu…
暂无图片
编程学习 ·

安卓安全那点事

本文旨在对于一个安卓app的安全知识做一个较为泛泛的总结,为开发出更安全的应用提供思路。内容比较粗略,仅起到抛砖引玉的效果,还望大家见谅。Android应用的安全 意义 在维基百科上有一个关于计算机安全的定义: 计算机安全(computer security)是计算机与网络领域的信息安…
暂无图片
编程学习 ·

RFID资产管理解决方案-RFID固定资产管理-新导智能

RFID资产管理解决方案系统集成了技能含量很高的远间隔无线射频辨认技能、短间隔射频技能及多用户防抵触技能监测技能,标签、定位器、读写器、通讯网关等,选用全新的嵌入式微处理器和嵌入式软件进行规划,体系信号穿透力强,对人体无电磁污染、环境适应性强,可一起定位多个标…
暂无图片
编程学习 ·

Bazel responsitory_rule 创建一个 rule

bazel respository_rule 主要功能是创建一个workspace 空间。对于package 内部的BUILD.tpl文件target 可以使用 responsity_ctx.file("//package") 创建 BUILD文件,或者repository_ctx.template(“BUILD”, build_tpl, {})对BUILD文件进行修改,然后通过@< name&…
暂无图片
编程学习 ·

错误: 找不到或无法加载主类 Hello

打开很久不用的eclipse,运行以前写hello world程序发现报错该报错是由于项目jar包丢失导致 解决方案:右键项目 Build path Configure-----> Build path----> Libaries 查看是否有红叉,显示miss,把确实的jar包删除或者替换就行了把这些红叉的删除或者替换就行了
暂无图片
编程学习 ·

Docker在阿里云上(Centos)下载安装

Docker作用 简单来说就是可以不在考虑项目的运行环境直接转移部署项目,只需要一个镜像文件,甚至可以理解为一个虚拟机(windows的VM软件里安装linux系统)。 卸载旧版本 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker…
暂无图片
编程学习 ·

php发送stmp邮件类 给有需要的人

<?php/*** email smtp (support php7)** Modified by: Reson 2019/06** More: http://www.wan0551.com**/class Smtp {/* Public Variables */public $smtp_port;public $time_out;public $host_name;public $log_file;public $relay_host;public $debug;public $auth;pu…
暂无图片
编程学习 ·

分享 github 上JavaArticle 知识库

我喜欢那些闪光的东西,比如冬日的雪花,天上的星星,还有你发光的眼睛。 以前都是被别人授之以鱼,尝到了鱼肉的鲜美,我学习了捕鱼之术,以后希望不仅能授之以鱼,同时也能授之以渔。 面试学会龙叔这套面试秘诀,一套大招带走面试官 当你面试“自我介绍”还在我是XXX时,看到…
暂无图片
编程学习 ·

Java并发编程之深入理解volatile

个人博客请访问 http://www.x0100.top 1. 保证可见性volatile保证了不同线程对volatile修饰变量进行操作时的可见性。对一个volatile变量的读,(任意线程)总是能看到对这个volatile变量最后的写入。一个线程修改volatile变量的值时,该变量的新值会立即刷新到主内存中,…
暂无图片
编程学习 ·

贪心:P2240 【深基12.例1】部分背包问题(洛谷)

贪心算法的讲解: 贪心算法 本题链接 第一种:结构体解题 #include<bits/stdc++.h> using namespace std; struct node {double w;//重量double v;//价值double p;//均价 }a[101]; int N; double T,sum; bool cmp(node a, node b) {return a.p > b.p; } int main() {…
暂无图片
编程学习 ·

ISIS DIS(学习笔记+实验验证)

ISIS DIS原理概述实验一,实验目的二,实验内容(一)实验拓扑(二)配置步骤1,基本配置2,配置IS-IS路由协议3,查看默认选举的DIS4,修改DIS优先级来控制DIS选举结果 原理概述 OSPF协议支持四种网络类型IS-IS只支持两种:广播网络和点到点网络 与OSPF协议相同,IS-IS协议会在…
暂无图片
编程学习 ·

Kotlin - 变量 val 和 var

什么是变量 变量是一个值的存储空间,这个值可以是一个字符串、一个数字或者其他东西。 每个变量都有一个名称(或标识符)来区别于其他变量。 可以通过变量的名称访问值。变量是程序中最常用的元素之一,因此理解如何使用它们非常重要。 声明变量 在开始使用变量之前,必须先声明…
暂无图片
编程学习 ·

CQF笔记M1L3泰勒级数和转移概率密度函数

CQF笔记M1L3泰勒级数和转移密度函数Module 1 Building Blocks of Quant FinanceLecture 2 Taylor Series and Transition Density Functions泰勒级数期权价格的泰勒级数trinomial random walk和转移密度函数Similarity solutions 求解过程 Module 1 Building Blocks of Quant F…
暂无图片
编程学习 ·

将现有Vue项目改为electron桌面端

零、前言之前看了看electron-vue,感觉还是存在一些问题的,比如electon的版本特别特别低,不能忍受。且如果你是用vue搭建的项目,最后希望能够打包成桌面端,其实很简单。一、基本步骤(1)创建vue项目、并进行开发vue create vueDemo(2)突然一天我想打包成桌面程序了// 进…
暂无图片
编程学习 ·

面向对象到底是什么

面向对象编程OOP,全称 Object Oriented Programming两个基础概念:类(class)和对象(object)一种编程范式或编程风格。它以类或对象作为组织代码的基本单元,并将封装、抽象、继承、多态四个特性,作为代码设计和实现的基石面向对象编程语言OOPL,全称 Object Oriented Pro…
暂无图片
编程学习 ·

数据结构的基本概念和常用术语

下面是对android数据结构的基本概念和常用术语的一些理解,大家可以了解学习一下。我收集了一些学习用的资料,其中包含了很多学习,面试,中高进阶fluuter资料,还有很多视频详解,如果有同学想进一步了解,详情请看文末。数据是信息的载体,是描述客观事物属性的数、字符以及…