1、HTTP
浏览器的启用的过程: 下面是廖老师对这个简单的分析:
跟踪了新浪的首页,我们来总结一下HTTP请求的流程:
步骤1:浏览器首先向服务器发送HTTP请求,请求包括:
方法:GET还是POST,GET仅请求资源,POST会附带用户数据;
路径:/full/url/path;
域名:由Host头指定:Host: www.sina.com.cn
以及其他相关的Header;
如果是POST,那么请求还包括一个Body,包含用户数据。
步骤2:服务器向浏览器返回HTTP响应,响应包括:
响应代码:200表示成功,3xx表示重定向,4xx表示客户端发送的请求有错误,5xx表示服务器端处理时发生了错误;
响应类型:由Content-Type指定;
以及其他相关的Header;
通常服务器的HTTP响应会携带内容,也就是有一个Body,包含响应的内容,网页的HTML源码就在Body中。
步骤3:如果浏览器还需要继续向服务器请求其他资源,比如图片,就再次发出HTTP请求,重复步骤1、2。
关于http 格式:
其中 在最最重要的一点就是
:每个HTTP请求和响应都遵循相同的格式,一个HTTP包含Header和Body两部分,其中Body是可选的。
那么是如何选呢 有两种请求的方式,一种是get 一种是post 的方式
2、 HTML 简介
<html>
<head>
<title>Hello</title>
</head>
<body>
<h1>Hello, world!</h1>
</body>
</html>
上面就是最简单的html 代码的结构
输出的结果是什么呢?
(1) CSS 介绍
CSS(Cascading Style Sheets) , css表示了HTML 中控制所有的元素是如何展现的,也就是我们所说的前端的代码 的写法, 我们还可以修改这个代码,使得Hello world更好看一些呢?
<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>
(2)JavaScript简介
每一次看到JavaScript 就以为和java 有关, 廖老师说这个东西 和java 一点关系都没有,这我就很放心了,按照老师的说法, JavaScript 的功能是为了将HTML 具有交互性而作为脚本语言添加的
<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>
老师推荐的学习网站如下:
讲解HTML、CSS和JavaScript就可以写3本书,对于优秀的Web开发人员来说,精通HTML、CSS和JavaScript是必须的,这里推荐一个在线学习网站w3schools:
以及一个对应的中文版本:
3、WSGI 接口
WSGI:Web Server Gateway Interface。 这个东西到底是干嘛用的呢????? 如说我们要写一个web 的应用程序, 那么实际上我们需要以下几个步骤:
1、通过浏览器发送一个HTTP请求
2、服务器受到请求之后,生成HTML文档
3、服务器将HTML的文档作为HTTP相应的Body 发送给浏览器(也就是我们看到的内容了)
4、浏览器受到HTTP响应,从HTTP body 中将所有的需要显示的数据 读取出来并且显示。
那,这就麻烦了,如果我们还需要对底层的传输的啊 以及收到的数据进行各种 读取什么的 所以我们的方案 就是最好通过,对应的接口,我们只需要利用 python 关心他们上面的 业务逻辑就好啊
对于这个接口 的定义是比较简单的,我们看下面的这个例子把
def application(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
return [b'<h1>Hello, web!</h1>']
-
需要接收下面这两个参数:
-
environ:一个包含所有HTTP请求信息的
dict
对象; -
start_response:一个发送HTTP响应的函数。
在 start_response 中, 就发送了响应的头部(只会发送一次),也就是我们只能调用一次这个函数,第一个是返回响应码,200 也就是表示 是 可以正常访问,第二个参数,表示的是http header 部分。 最后,我们使用return 作为最后返回的参数。
通过start_response()
发送Header,最后返回Body。
好消息是Python内置了一个WSGI服务器,这个模块叫wsgiref,它是用纯Python编写的WSGI服务器的参考实现。所谓“参考实现”是指该实现完全符合WSGI标准,但是不考虑任何运行效率,仅供开发和测试使用。
运行WSGI 服务:
首先编写hello.py
def application(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
return [b'<h1>Hello, web!</h1>']
然后,再编写一个server.py
,负责启动WSGI服务器,加载application()
函数:
# server.py
# 从wsgiref模块导入:
from wsgiref.simple_server import make_server
# 导入我们自己编写的application函数:
from hello import application
# 创建一个服务器,IP地址为空,端口是8000,处理函数是application:
httpd = make_server('', 8000, application)
print('Serving HTTP on port 8000...')
# 开始监听HTTP请求:
httpd.serve_forever(
注意:如果8000
端口已被其他程序占用,启动将失败,请修改成其他端口。
启动成功后,打开浏览器,输入http://localhost:8000/
,就可以看到结果了:
下面是运行结果:
4、使用WEB框架
由于用Python开发一个Web框架十分容易,所以Python有上百个开源的Web框架。这里我们先不讨论各种Web框架的优缺点,直接选择一个比较流行的Web框架——Flask来使用。
代码如下:
from flask import Flask
from flask import request
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def home():
return '<h1>Home</h1>'
@app.route('/signin', methods=['GET'])
def signin_form():
return '''<form action="/signin" method="post">
<p><input name="username"></p>
<p><input name="password" type="password"></p>
<p><button type="submit">Sign In</button></p>
</form>'''
@app.route('/signin', methods=['POST'])
def signin():
# 需要从request对象读取表单内容:
if request.form['username']=='admin' and request.form['password']=='password':
return '<h3>Hello, admin!</h3>'
return '<h3>Bad username or password.</h3>'
if __name__ == '__main__':
app.run()
上面中的内容用到了装饰器,这个时候,就有必要从新复习一下,装饰器 是什么东西了。
复习装饰器 是干嘛的
这个链接,就是廖老师之前对装饰器进行的解释
下面从新进行简单的说明好了
def now():
... print('2015-3-25')
假设我们现在有一个函数,now(), 但是我们要增强now()
函数的功能,比如,在函数调用前后自动打印日志,但又不希望修改now()
函数的定义,这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。
简单来说,就是我从新编写了一个函数,让它在执行@func 之前,提前先执行一下 @的这个函数 这样就能不改变now 的定义的方式。
5、使用模板
Web框架把我们从WSGI中拯救出来了。现在,我们只需要不断地编写函数,带上URL,就可以继续Web App的开发了。
那是不是手工写函数,把html 写出来,随便选择一个网页 按一下F12 相信大家看到的源码 都不会比较少,所以肯定是有更简单和方便的方式用来进行源码的开发。