如果web框架不支持异步。你可以想象新冠期间做核酸检测的场景(假设核酸检测点只有一组设备只能,只能排一个长队),很多人排长队到一个站点做核酸检测,监测点站点同一时间不能给多个人做核酸,只能检测完前面的人才能再检测后边的人。这里排队的人要做核酸检测就相当于用户在浏览器发起对web服务器的请求,检测点给排队的人做检测,相当于服务器对客户端做出的响应。同一时间多个人要做核酸也只能给一个人做检测,相当于web服务器同一时间只能接受一个客户端请求,响应完前面的用户请求才能处理后面的请求。
如果web框架支持异步。你可以想象在餐厅用餐,同一个时间,可以多个人点餐,点餐完成后厨房可以同时为多个用户准备菜品。这个过程就是异步的。
性能实测对比(AWS t3.medium实例:2vCPU/4GB内存)
开发动态Tornado Web程序
通过一个图书管理系统实例的实现过程,介绍在Tornado框架中使用MongoDB数据库实现动态Web的过程。- 首先在MongoDB服务器中创建一个数据库和集合,然后用图书内容进行填充。
- 编写Python程序文件burts_books_db.py。首先在程序中通过属性db连接MongoDB服务器,然后使用方法find()从数据库中获取图书信息列表,在渲染模板文件recommended.html时,将这个图书列表传递给RecommendedHandler对象中的方法get()。
- 编写Python文件books_rwdb.py,分别实现向数据中添加图书和修改图书两个功能
使用MySQL数据库实现持久化Web服务
搭建PyMySQL数据库环境
在使用PyMySQL数据库之前,必须先安装PyMySQL。PyMySQL的下载地址是https://github.com/PyMySQL/PyMySQL。简易会员登录系统
1)在template文件夹下编写登录表单文件login.html。2)打开MySQL数据库,创建数据库denglu,然后在数据库中新建userinfo数据表。3)编写主程序文件app.py,建立和上述MySQL数据库的连接,获取用户在登录表单中的数据。如果登录数据合法则输出“登录成功”的提示,如果非法则输出“登录失败”的提示。使用ORM实现持久化Web服务
对象关系映射(Object Relational Mapping, ORM)用于实现面向对象编程语言中不同类型系统的数据之间的转换。在现实应用中有很多不同的数据库工具,其中的大部分数据库工具都包含对应的Python接口。但是在使用这些数据库工具时,使用者必须掌握SQL语言的知识。如果开发者希望不使用SQL也可实现数据库操作,一种最常见的替代方案是使用ORM。ORM系统的功能是将纯SQL语句进行抽象化处理,处理后和Python中的对象一一对应,这样开发者只要操作这些对象就能实现与对应SQL语句相同的功能。在ORM系统中,传统的数据库表用Python类来表示,一个数据表对应一个Python类。其中的数据列对应Python类的属性,而数据库操作则对应Python类中的方法。这样整个程序的数据库操作清晰明了,十分适合开发大型项目。在开发Python程序的过程中,常用的Python ORM有SQLAlchemy(http://www.sqlalchemy.org)和SQLObject(http://sqlobject.org)。另外,还包括Storm、PyDO/PyDO2、PDO、Dejavu、Durus、QLime和ForgetSQL等。著名的Web框架通常会有它们自己的ORM模块,如Django框架的数据库API开发异步Web程序
异步和同步是两个相对的概念,因为异步处理的效率更高,所以经常被用在大型Web程序中。在现实应用中,最常见的异步处理技术是Ajax。同步处理
当浏览器向服务器发送请求时,如果使用同步请求,服务器将响应的数据直接传送给浏览器的内存,这样会覆盖浏览器内存中原有的数据。浏览器在接收到响应的数据后,只能向浏览用户显示服务器端返回的数据,无法显示发送请求之前在浏览器中添加的数据。当使用同步请求与服务器进行数据交互的时候,浏览器和服务器之间是多对一的关系。因为同步方式是直接与服务器进行数据交互的,所以当页面中需要与服务器数据交互的操作较少或者需要回显的数据较少时,推荐使用同步方式处理。但是同步方式有很大的弊端,在服务器处理用户请求的过程中,浏览器一直处于等待服务器结果的状态,用户无法在页面上进行其他的操作。试想一下,如果在页面中有大量的信息,此时使用同步请求与服务器进行交互,还需要向浏览器端页面显示数据,这需要开发者在后台代码中同时开发处理数据和处理请求的代码,这类代码的编写非常麻烦,极大地降低了开发效率。异步处理
通过使用异步处理,可以使浏览器给服务器发送请求时,浏览器在服务器处理请求的过程中不用处于等待状态。并且在浏览器接收服务器端发送来的响应数据时,不用再重新加载整个页面。也就是说浏览器不会丢失在发送请求之前的数据,并且可以实现页面中局部内容的刷新功能。在现实应用中,最常见的异步处理技术是Ajax的异步请求模型。在同步请求模型中,浏览器直接向服务器发送请求,并且直接接收和处理服务器发送来的响应数据。这样浏览器在发送完一个请求后,会等待服务器端处理请求,然后响应处理后的请求,在此期间浏览器端不能做其他事情。这好像租房子或买房子的过程,可以自己去找,找合适自己的那一个,然后跟房东谈具体价格。在找房的时候自己可能没时间去工作。还有一种找房子的方式是选择一家房产中介,在中介找房子的过程中自己可以去工作。异步处理类似于上述房产中介帮忙找房子的模式,例如,在Ajax技术中,浏览器把请求工作交给代理对象XMLHttpRequest来完成。代理对象负责向服务器发起浏览请求,并接收和解析服务器响应后的数据,然后把响应数据显示到浏览器中的某个局部控件上,从而实现了页面中的局部内容的刷新功能。异步请求使浏览器不用等待服务器处理请求,不用重新加载整个页面来展示服务器响应的数据,在异步请求发送的过程中浏览器还能进行其他的操作。Django Web开发基础Django是一个开放源代码的Web应用框架,使用Python语言编写而成。Django最早在在2005年7月发布,并于2008年9月发布了第一个正式版本1.0。Django采用了MVC的软件设计模式,即模型(M)-视图(V)-控制器(C)。
Django是Python Web开发领域最常用的框架之一,最初由LawrenceJournal-World报业在线业务的Web开发者创建。Django在2005年正式发布,引入了以“新闻业的时间观”开发应用的方式。本节将简要介绍Django框架的基础知识。在Django框架中,因为通常使用自定义模板实现控制器接受用户输入的部分,所以在Django中更加关注的是MTV开发模式,即模型(Model)-模板(Template)-视图(Views),这3个部分的具体说明如下所述。• 模型(Model),即数据存取层,用于处理与数据库操作相关的所有事务。• 模板(Template),即表现层,用于处理与界面表现相关的内容,通常使用静态HTML、CSS和JS技术实现。• 视图(View),即业务逻辑层,是模型与模板之间的桥梁。视图在获取模型层的数据后,将数据显示在静态模板文件中。Flask Web开发基础
Flask是一个免费的Web框架,也是一个年轻、充满活力的微框架,有着众多的拥护者,开发文档齐全,社区活跃度高。Flask的设计目标是实现一个WSGI的微框架,其核心代码保持简单和可扩展性。• Werkzeug:一个WSGI(Web应用程序和多种服务器之间的标准Python接口)工具集,可以作为一个Web框架的底层库。在Flask框架中,Werkzeug正是作为Flask框架底层库而存在的。• Jinja2:Python语言的经典模板引擎,负责渲染模板文件。为了理解Flask框架是如何抽象出Web开发中的共同部分,先来看看Web应用程序的一般流程。对于Web应用程序来说,当客户端想要获取动态资源时,就会发起一个HTTP请求(如用浏览器访问一个URL),Web应用程序会在后台模块中实现相应的业务处理,例如,从数据库中获取用户需要的数据,然后生成相应的HTTP响应。如果想访问静态资源,直接返回这些资源即可,而无须实现和业务处理相关的功能。