Web开发
CS框架:
最早的软件都是运行在大型机上的,后来随着PC机的兴起,软件开始主要运行在桌面上,而数据库这样的软件运行在服务器端,这种Client/Server模式(客户/服务器模式)简称CS架构。
BS框架:
随着时间推移,CS架构不适合Web,最大的原因是Web应用程序的修改和升级非常迅速,而CS架构需要每个客户端逐个升级桌面App,因此,Browser/Server模式(浏览器/服务器模式)开始流行,简称BS架构。
在BS架构下,客户端只需要浏览器,应用程序的逻辑和数据都存储在服务器端。浏览器只需要请求服务器,获取Web页面,并把Web页面展示给用户即可。
- 具有极强的交互性:web页面是用HTML编写的,HTML具有超强的表现力,服务端升级后,客户端无需任何部署就可以使用到新的版本
- 除了office和photoshop等大型软件,大部分软件(新浪的新闻、博客、微博等服务都是Web应用)
Web开发经历过的几个阶段:
- 静态Web页面:由文本编辑器直接编辑并生成静态的HTML页面,如果要修改Web页面的内容,就需要再次编辑HTML源文件
- CGI:由于静态Web页面无法与用户交互,要处理用户发送的动态数据,出现了Common Gateway Interface,简称CGI,用C/C++编写。
- ASP/JSP/PHP:由于Web应用特点是修改频繁,而脚本语言由于开发效率高,与HTML结合紧密,因此,迅速取代了CGI模式。ASP是微软推出的用VBScript脚本编程的Web开发技术,而JSP用Java来编写脚本,PHP本身则是开源的脚本语言。
- MVC:为了解决直接用脚本语言嵌入HTML导致的可维护性差的问题,Web应用也引入了Model-View-Controller的模式,来简化Web开发。ASP发展为ASP.Net,JSP和PHP也有一大堆MVC框架。
与python的结合:
- Python的诞生历史比Web还要早,由于Python是一种解释型的脚本语言,开发效率高,所以非常适合用来做Web开发。
- Python有上百种Web开发框架,有很多成熟的模板技术,选择Python开发Web应用,不但开发效率高,而且运行速度快。
HTTP协议简介
浏览器和服务器之间的传输协议是HTTP
- HTML是一种用来定义网页的文本,会HTML,就可以编写网页;
- HTTP是在网络上传输HTML的协议,用于浏览器和服务器的通信。
略….
HTML简介
网页就是HTML,网页中不但包含文字,还有图片、视频、Flash小游戏,有复杂的排版、动画效果,所以,HTML定义了一套语法规则,来告诉浏览器如何把一个丰富多彩的页面显示出来。
最简单的HTML的形式:
# 用一系列的Tag组成的
<html>
<head>
<title>Hello</title>
</head>
<body>
<h1>Hello, world!</h1>
</body>
</html>
CSS简介:
CSS是Cascading Style Sheets(层叠样式表)的简称,CSS用来控制HTML里的所有元素如何展现,比如,给标题元素
加一个样式,变成48号字体,灰色,带阴影:
<html>
<head>
<title>Hello</title>
<style>
h1 {
color: #333333;
font-size: 48px;
text-shadow: 3px 3px 3px #666666;
}
</style>
</head>
<body>
<h1>Hello, world!</h1>
</body>
</html>
<html>
<head>
<title>Hello</title>
<style>
h1 {
color: #333333;
font-size: 48px;
text-shadow: 3px 3px 3px #666666;
}
</style>
</head>
<body>
<h1>Hello, world!</h1>
</body>
</html>
JavaScript简介:
JavaScript是为了让HTML具有交互性而作为脚本语言添加的,JavaScript既可以内嵌到HTML中,也可以从外部链接到HTML中。如果我们希望当用户点击标题时把标题变成红色,就必须通过JavaScript来实现:
<html>
<head>
<title>Hello</title>
<style>
h1 {
color: #333333;
font-size: 48px;
text-shadow: 3px 3px 3px #666666;
}
</style>
<script>
function change() {
document.getElementsByTagName('h1')[0].style.color = '#ff0000';
}
</script>
</head>
<body>
<h1 onclick="change()">Hello, world!</h1>
</body>
</html>
小结:
- 如果要学习Web开发,首先要对HTML、CSS和JavaScript作一定的了解。HTML定义了页面的内容,CSS来控制页面元素的样式,而JavaScript负责页面的交互逻辑
- 讲解HTML、CSS和JavaScript就可以写3本书,对于优秀的Web开发人员来说,精通HTML、CSS和JavaScript是必须的,参考网址:
- 当我们用Python或者其他语言开发Web应用时,我们就是要在服务器端动态创建出HTML,这样,浏览器就会向不同的用户显示出不同的Web页面。
WSGI接口
Web应用的本质就是:
- 浏览器发送一个HTTP请求;
- 服务器收到请求,生成一个HTML文档;
- 服务器把HTML文档作为HTTP响应的Body发送给浏览器;
- 浏览器收到HTTP响应,从HTTP Body取出HTML文档并显示。
如何动态的生成HTML:
- 底层代码由专门的服务器软件实现
- 我们用Python专注于生成HTML文档
- 避免接触到TCP连接、HTTP原始请求和响应格式,需要一个统一的接口(Web Server Gateway Interface,简称WSGI),让我们专心用Python编写Web业务.
详细的实施过程后续感兴趣再继续学就行
使用Web框架
使用模板
异步IO
协程
asyncio
async/await
aiohttp
使用MicroPython
搭建开发环境
控制小车
遥控小车
遥控转向
实战这一块是重头戏,也不是一时半会就能整明白的
目标:
一个博客网站,包含日志、用户和评论三大部分
慢慢的积累一点,建立个人的博客,可以使用比较成熟的开发框架flask Django,也可以从最底层的代码开始构建数据库,构建web框架、构建ORM、构建MVC 构建API,到构建前端的页面CSS/HTML,Javascript,DOM操作再到服务器的部署
Day1 - 搭建开发环境
创建好了一个项目的目录结构,并同时建立git仓库并同步至Github,保证代码修改的安全
开发Web APP需要的第三方库:
- 异步框架:aiohttp
- 前端模板引擎jinja2
- MySQL的python异步驱动程序aiomysql:
- 轻量级标记语言Markdown, 将文本转换为有效的HTML
Day2-编写Web APP骨架
Web App建立在asyncio的基础上,用aiohttp写一个基本的app.py
经过参考别人的代码之后,基本已经算是可以到处相应的网页了,没有什么其他的问题。
这里把相关的代码贴在这里
import logging;logging.basicConfig(level=logging.INFO)
import asyncio
from aiohttp import web
# 定义服务器响应请求的的返回为 "Awesome Website"
async def index(request):
return web.Response(body=b'<h1>Awesome Website</h1>', content_type='text/html')
# 建立服务器应用,持续监听本地9000端口的http请求,对首页"/"进行响应
def init():
app = web.Application()
app.router.add_get('/', index)
web.run_app(app, host='127.0.0.1', port=9000)
if __name__ == "__main__":
init()
编写ORM
刚开始看这一块,发现这里面需要学习的地方还是有很多的,有些地方是需要自己花时间去慢慢来领悟的,不是那么快就可以真正搞清楚的,一时半会。总之也是跟着一起学习的一个过程。
对关系映射(object Realational Mapping),是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术:通过使用描述对象与数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中
在一个Web App中,所有数据,包括用户信息、发布的日志、评论等,都存储在数据库中。在awesome-python3-webapp中,我们选择MySQL作为数据库。
首先把常用的SELECT、INSERT、UPDATE和DELETE操作用函数封装起来。
Web框架使用了基于asyncio的aiohttp,这是基于协程的异步模型。在协程中,不能调用普通的同步IO操作,因为所有用户都是由一个线程服务的,协程的执行速度必须非常快,才能处理大量用户的请求。而耗时的IO操作不能在协程中以同步的方式调用,否则,等待一个IO操作时,系统无法响应任何其他用户。[异步编程的原则:一旦决定使用异步,系统的每一层都必须是异步的,开弓没有回头箭]
aiomysql为MySQL数据库提供了异步IO的驱动。
创建连接池
创建一个全局的连接池,每个http请求都可以从连接池中直接获取数据库连接,可以不用频繁的打开和关闭数据库,能复用就尽量的复用
连接池由全局变量__pool存储,缺省的情况下将编码设置为utf8 ,自动提交事务
Select
要执行SELECT语句,用select函数执行,需要传入SQL语句和SQL参数