django框架学习文档_Python四大主流网络编程框架,你知道么?

44a2094546a21dd30bf03ba13c06b531.gif

高并发处理框架—— Tornado

33682c3ad85098b46b7eddcb72870196.png

Tornado 是使用 Python 编写的一个强大的可扩展的 Web 服务器。它在处理高网络流量时表现得足够强健,却在创建和编写时有着足够的轻量级,并能够被用在大量的应用和工具中。Tornado 作为 FriendFeed 网站的基础框架,于2009年9月10日发布,目前已经获得了很多社区的支持,并且在一系列不同的场合中得到应用。除 FriendFeed 和 Facebook 外,还有很多公司在生产上转向Tornado,包括 Quora、Turntable.fm、Bit.ly、Hipmunk 及 MyYearbook 等。

相对于其他 Python 网络框架,Tornado 有如下特点。

完备的 Web 框架:与 Django、Flask 等一样,Tornado 也提供了 URL 路由映射、Request 上下文、基于模板的页面渲染技术等开发 Web 应用的必备工具。

是一个高效的网络库,性能与 Twisted、Gevent 等底层 Python 框架相媲美:提供了异步 I/O 支持、超时事件处理。这使得 Tornado 除了可以作为 Web 应用服务器框架,还可以用来做爬虫应用、物联网关、游戏服务器等后台应用。

提供高效 HTTPClient:除了服务器端框架,Tornado 还提供了基于异步框架的HTTP 客户端。

提供高效的内部 HTTP 服务器:虽然其他 Python 网络框架(Django、Flask)也提供了内部 HTTP 服务器,但它们的 HTTP 服务器由于性能原因只能用于测试环境。而 Tornado 的HTTP服务器与 Tornado 异步调用紧密结合,可以直接用于生产环境。

完备的 WebSocket 支持:WebSocket 是 HTML5 的一种新标准,实现了浏览器与服务器之间的双向实时通信。

因为 Tornado 的上述特点,Tornado 常被用作大型站点的接口服务框架,而不像 Django 那样着眼于建立完整的大型网站,所以本章着重讲解 Tornado 的异步及协程编程、身份认证框架、独特的非 WSGI 部署方式。

支持快速建站的框架——Flask

c399a8a4829c0942847e3ef531419e77.png

Flask 是 Python Web 框架族里比较年轻的一个,于 2010 年出现,这使得它吸收了其他框架的优点,并且把自己的主要领域定义在了微小项目上。同时,它是可扩展的,Flask 让开发者自己选择用什么数据库插件存储他们的数据。很多功能简单但性能卓越的网站就是基于 Flask 框架而搭建的,比如 http://httpbin.org/ 就是一个功能简单但性能强大的 HTTP 测试项目。Flask 是一个面向简单需求和小型应用的微框架。

相对于其他 Python 语言的 Web 框架而言,Flask 的特点可以归结如下。

内置开发服务器和调试器

网络程序调试是在将编制好的网站投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程。有经验的开发者都知道,这是保证网站系统能够正式应用的必要步骤。

Flask 自带的开发服务器使开发者在调试程序时无须再安装其他任何网络服务器,比如 Tomcat、JBoss、Apache 等。Flask 默认处于调试状态,使得运行中的任何错误会同时向两个目标发送信息:一个是 Python Console,即启动Python 程序的控制台;另一个是 HTTP 客户端,即 Flask 开发服务器将调试信息传递给了客户端。

与 Python 单元测试功能无缝衔接

单元测试是对最小软件开发单元的测试,其重点测试程序的内部结构,主要采用白盒测试方法,由开发人员负责。单元测试的主要目标是保证函数在给定的输入状态下,能够得到预想的输出,在不符合要求时能够提醒开发人员进行检查。

Flask 提供了一个与 Python 自带的单元测试框架 unitest 无缝衔接的测试接口,即 Flask 对象的 test_client() 函数。通过 test_client() 函数,测试程序可以模拟进行 HTTP 访问的客户端来调用 Flask 路由处理函数,并且获取函数的输出来进行自定义的验证。

使用 Jinja2 模板

将 HTML 页面与后台应用程序联系起来一直是网站程序框架的一个重要目标。Flask 通过使用 Jinja2 模板技术解决了这个问题。Jinja2 是一个非常灵活的 HTML 模板技术,它是从 Django 模板发展而来的,但是比 Django 模板使用起来更加自由且更加高效。Jinja2 模板使用配制的语义系统,提供灵活的模板继承技术,自动抗击 XSS 跨站攻击并且易于调试。

完全兼容 WSGI 1.0 标准

WSGI(Web Server Gateway Interface)具有很强的伸缩性且能运行于多线程或多进程环境下,因为 Python 线程全局锁的存在,使得 WSGI 的这个特性至关重要。WSGI 已经是 Python 界的一个主要标准,各种大型网路服务器对其都有良好的支持。WSGI 位于Web应用程序与 Web 服务器之间,与 WSGI 完全兼容使得 Flask 能够配置到各种大型网络服务器中。

基于 Unicode 编码

Flask 是完全基于 Unicode 的。这对制作非纯 ASCII 字符集的网站来说非常方便。HTTP 本身是基于字节的,也就是说任何编码格式都可以在 HTTP 中传输。但是,HTTP 要求在 HTTP Head 中显式地声明在本次传输中所应用的编码格式。在默认情况下,Flask 会自动添加一个 UTF-8 编码格式的 HTTP Head,使程序员无须担心编码的问题。

底层自定义协议网络框架——Twisted

c318cd33ef4a39924a585e9efc90e1ec.png

以上讲到的 2个 Python Web 框架都是围绕着应用层 HTTP 展开的,而 Twisted是一个例外。Twisted 是一个用 Python 语言编写的事件驱动的网络框架,对于追求服务器程序性能的应用,Twisted 框架是一个很好的选择。

Twisted 是一个有着 10 多年历史的开源事件驱动框架。Twisted 支持很多种协议,包括传输层的 UDP、TCP、TLS,以及应用层的 HTTP、FTP 等。对于所有这些协议,Twisted 提供了客户端和服务器方面的开发工具。

Twisted 框架的历史悠久,其主要发行版本都以 Python 2 为基础,最新的版本为基于 Python 2.7 的 Twisted-15.4.0。Twisted 社区正在开发基于 Python 3 的版本,但目前为止尚没有基于 Python 3 的 Twisted 稳定发行版。

Twisted 是一个高性能的编程框架。在不同的操作系统平台上,Twisted 利用不同的底层技术实现了高效能通信。在 Windows 中,Twisted 的实现基于 I/O 完成端口(IOCP,Input/Output Completion Port)技术,它保证了底层高效地将I/O事件通知给框架及应用程序;在 Linux 中,Twisted 的实现基于 epoll 技术,epoll是Linux下多路复用 I/O 接口 select/poll 的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统 CPU 利用率。

在开发方法上,Twisted引导程序员使用异步编程模型。Twisted 提供了丰富的Defer、Threading等特性来支持异步编程。

企业级开发框架——Django

0fd2ab3083f15c37d57069e67c3c89c0.png

Django 于 2003 年诞生于美国堪萨斯(Kansas)州,最初用来制作在线新闻Web站点,于 2005 年加入了 BSD 许可证家族,成为开源网络框架。Django 根据比利时的爵士音乐家 Django Reinhardt 命名,作者这样命名 Django 意味着Django 能优雅地演奏(开发)功能丰富的乐曲(Web应用)。

它是当前Python世界里最负盛名且最成熟的网络框架。最初用来制作在线新闻的 Web 站点,目前已发展为应用最广泛的 Python 网络框架。Django 的各模块之间结合得比较紧密,所以在功能强大的同时又是一个相对封闭的系统,但是其健全的在线文档及开发社区,使开发者在遇到问题时能找到解决方法。

Django 框架的特点

相对于 Python 的其他 Web 框架,Django 的功能是最完整的,Django 定义了服务发布、路由映射、模板编程、数据处理的一整套功能。这也意味着 Django模块之间紧密耦合,开发者需要学习 Django 自己定义的这一整套技术。Django的主要特点如下。

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

集成数据访问组件:Django 的 Model 层自带数据库 ORM 组件,使开发者无须学习其他数据库访问技术(dbi、SQLAlchemy 等)。

强大的 URL 映射技术:Django 使用正则表达式管理 URL 映射,因此给开发者带来了极高的灵活性。

后台管理系统自动生成:开发者只需通过简单的几行配置和代码就可以实现完整的后台数据管理 Web 控制台。

错误信息非常完整:在开发调试过程中如果出现运行异常,则 Django 可以提供非常完整的错误信息帮助开发者定位问题,比如缺少xxx组件的配置引用等,这样可以使开发者马上改正错误。

Django 的组成结构

Django 是遵循MVC架构的Web开发框架,其主要由以下几部分组成。

管理工具(Management):一套内置的创建站点、迁移数据、维护静态文件的命令工具。

模型(Model):提供数据访问接口和模块,包括数据字段、元数据、数据关系等的定义及操作。

视图(View):Django 的视图层封装了 HTTP Request 和 Response 的一系列操作和数据流,其主要功能包括URL映射机制、绑定模板等。

模板(Template):是一套 Django 自己的页面渲染模板语言,用若干内置的tags和filters定义页面的生成方式。

表单(Form):通过内置的数据类型和控件生成 HTML 表单。

管理站(Admin):通过声明需要管理的 Model,快速生成后台数据管理网站。

*声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

2f664972bd1a386017567b39924213e1.gif

觉得不错,点个“在看”然后转发出去dc17c0d996eec3a068b7c155ff27e490.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446159.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VS Studio报错无法解析的外部符号 _imp_XXXXXXXXX

出现字符_imp,说明不是真正的静态库,而是某个动态库的导入库,导入函数和自己不同名,所以加了字符_imp。比如说_imp_GetUserNameA就是GetUserNameA函数。会报这种错误的原因: 1、说明注册表函数没有相关的lib库&#xf…

hashmap put过程_阿里十年技术大咖,教你如何分析1.7中HashMap死循环

在多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%,HashMap在并发执行put操作时会引起死循环,是因为多线程会导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,Entry…

Socket代码实现服务端 和 客户端之间通信

服务端代码 // Socket_connection.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #ifndef UNICODE #define UNICODE #endif#define WIN32_LEAN_AND_MEAN#include <winsock2.h> #include <Ws2tcpip.h> #include <stdio.h> #incl…

python综合管理系统_Python-20 (信息系统-框架/循环/增删/综合应用)

# 1. 目标 这里我们通过简单案例的综合应用&#xff0c;了解框架的概念&#xff0c;感受循环、字符字典数据处理等基础点的应用场景 # 2. 框架 搭建一个人员信息管理系统的简单框架&#xff0c;初步感受框架的概念。 1> 主程序 -- cards_mian.py程序的主功能代码&…

本地搭建server和客户端使用端口进行数据通信,使用Wireshark抓取127.0.0.1环回地址并分析通信数据

本地搭建服务端和客户端 参考网址 Socket代码实现服务端 和 客户端之间通信_CHYabc123456hh的博客-CSDN博客server指定通信的端口是 5099client 使用的端口是动态变化的&#xff0c;因此在wireshark里面需要设定的抓取端口是 5099 使用wireshark开启抓包 参考链接 [tcp] Wir…

double operator[](int i)_java中double类型精度丢失问题及解决方法

原文链接&#xff1a;https://blog.csdn.net/yacolspace/article/details/78287394double类型数据加减操作精度丢失问题今天在项目中用到double类型数据加减运算时&#xff0c;遇到了一个奇怪的问题&#xff0c;比如120.2300.03&#xff0c;理论上结果应该是321.23&#xff0c;…

验证客户端和服务端可以传输经SM4加密的密文数据,从而验证发送数据已使用服务器密码机进行SM4加密,而不是随便的字符串乱码

前提操作 搭建客户端和服务端 Socket代码实现服务端 和 客户端之间通信_CHYabc123456hh的博客-CSDN博客使用wireshark进行数据的监听和测试https://blog.csdn.net/CHYabc123456hh/article/details/121929288 结论验证 使用在线SM4加密&#xff0c;输入明文 和 选择模式,生成…

Socket编程 涵盖代码和函数参数介绍

Socket是针对端系统&#xff0c;也就是用户主机上开发程序&#xff0c;不涉及网络设备(交换机、路由器)独立于网卡驱动层之上&#xff0c;不涉及硬件&#xff0c;即基于Packet Driver编程端&#xff1a;是指通信双方两台电脑 应用编程接口API 也就是两端 应用层内部的应用进程之…

springcloud阿里巴巴五大组件_如何无缝迁移 SpringCloud/Dubbo 应用到 Serverless 架构

简介&#xff1a; 本文分为三部分来介绍&#xff0c;分别介绍微服务应用迁移到 SAE 的优势&#xff0c;如何迁移 SpringCloud/Dubbo 应用到 SAE 上&#xff0c;以及针对 SpringCloud 应用迁移的实践演示。背景通过前面几节课程的学习&#xff0c;相信大家对于 SAE 平台已经有了…

frame中src怎么设置成一个变量_Go 语言设计哲学之七:变量声明须一致

Go 语言&#xff0c;使用变量之前需要先进行变量的声明。var s string “Golang"n : 666Go 语言有两类变量包级别(package varible)&#xff1a;在 package 级别可见的变量。如果是导出变量&#xff0c;该变量也可以被视为全局变量&#xff1b;局部变量(local varible)&a…

getdevicecaps在哪个头文件里_一招定胜负,while (true) 和 for (;;) 到底哪个更快

在JDK8u的jdk项目下做个很粗略的搜索&#xff1a;mymbp:/Users/me/workspace/jdk8u/jdk/src$ egrep -nr "for (s?;s?;" . | wc -l 369mymbp:/Users/me/workspace/jdk8u/jdk/src$ egrep -nr "while (true" . | wc -l 323并没有差多少。其次&#…

SM4 ECB加密模式 数据对比试验论证

程序如下 开启服务器密码机&#xff0c;调用SM4加密函数&#xff0c;需要注意的是程序输入的数据全部使用Hex 十六进制的格式 Key IV Data IV 00000000000000000000000000000000Source(加密数据) char input_date[] {a,a,a,a,.......} Ascll编码 需要转16进制input_data …

二分法查找c语言程序_C语言的那些经典程序 第十四期

戳“在看”一起来充电吧!C语言的那些经典程序 第十四期本期小C给大家带来三个用C语言解决实际问题的典例。如果全都理解&#xff0c;相信肯定能给大家带来收获&#xff01;接下来让我们看看是哪些程序吧&#xff01;1字符查找源程序&#xff1a;运行结果&#xff1a;程序分析:该…

centos网络隔一段时间就断_计算机网络总结

POST跟GET的区别作用GET用于获取资源&#xff0c;而POST用于传输实体参数GET的参数以字符串的格式出现在URL中&#xff0c;而POST的参数存储在请求实体中。因为URL只支持ASCII码&#xff0c;故GET的参数如果存在中文等字符就需要先进行编码&#xff0c;POST参考支持标准字符集。…

使用wireshark抓包,本地环回测试通信数据已经通过SM4国密算法加密

具体操作 本实验采用 本地环回测试开启wireshark抓包工具&#xff0c;设定端口号 tcp.port 5099 &#xff08;5099为服务端对外开启服务的端口号&#xff09;&#xff0c;不可以使用ip.addr指定ip地址&#xff0c;因为本地环回测试&#xff0c;相关信息太多&#xff0c;使用端…

public 函数_UE4精品教程 | 渲染编程(C++篇)【第三卷:从仿函数到std::function再到虚幻4Delegate】...

本文转载于YivanLee知乎作者专题目录链接&#xff1a;https://zhuanlan.zhihu.com/p/67694999这几天研究了一下虚幻4的delegate&#xff0c;但是想要理解这个&#xff0c;还得从仿函数说起。下面是一段代码例子&#xff1a;class MyFunctor{ public: int operator()(int …

C语言深度剖析书籍学习记录 第一章 关键字

C语言标准定义了32个关键字 union声明联合数据类型 Union declaration - cppreference.com维护足够的空间来置放多个数据成员中的“一种”&#xff0c;而不是为每一个数据成员配置空间&#xff0c;在 union 中所有的数据成员共用一个空间&#xff0c;同一时间只能储存其中一个…

js页面自适应屏幕大小_移动端自适应布局方法的calc()与vw

前端人员在处理移动端自适应布局时&#xff0c;目前前端最流行的方法应该就是使用媒体查询&#xff0c;来设置HTML的字体大小&#xff0c;然后用rem为单位对Dom的宽高进行设置&#xff0c;这个方法的优势在于兼容性方面很好&#xff0c;劣势则在于当前市场上不同的机型太多&…

C语言深度剖析书籍学习记录 第二章 符号

\ 连接符号&#xff0c;// \ 可以把下一行也注释调编译器 删除注释时&#xff0c;会使用空格进行替代