WSGI接口
web应用的本质就是:
- 浏览器发送一个HTML请求;
- 服务器收到请求,生成一个HTML文档;
- 服务器把HTML文档作为HTTP响应的Body发给浏览器;
- 浏览器收到HTTP 响应,从HTTP Body取出HTML文档并显示。
所以最简单的Web应用就是先把HTML用文件保存好,用一个现成的HTTP服务器软件,接受用户请求,从文件中读取HTML,返回。Apache、Nginx、Lighttpd等这些常用的静态服务器就是干这种事的。
我们需要一个统一的接口,让我们专心用Python编写Web业务。
这个接口就是WSGI: Web Server Gateway Interface。
def application(environ,start_response):
start_response('200 OK',[('Content-Type','text/HTML')])
return [b'<h1>Hello,Web!</h1>']
上面的application()函数就是符合WSGI标准的一个HTTP处理函数,它接受两个参数:
- environ:一个包含所有HTTP请求的 dict 对象;
- start_response:一个发送HTTP响应的函数。
在application()函数中,调用:
start__response('200 OK',[('Content-Type','text/html')])
就发送了HTTP响应的Header,注意Header只能发送一次,也就是只能调用start_response()函数。
运行WSGI服务
先编写hello.py,实现Web应用程序的WSGI处理函数:
def application(environ,start_response):
start_response('200 OK',[('Content-Type','text/html')])
return [b'<h1>Hello,web<h1>']
编写一个sever.py,负责启动WSGI服务器。加载application()函数:
#server.py
#从wsgiref模块导入:
from wsgiref.simple_server import make_server
#导入我们自己写的application函数
from hello import application
#创建一个服务器,IP地址为空,端口是8000,处理函数是application
httpd = make_sever('',8000,application)
print('Serving HTTP on port 8000')
#开始监听HTTP请求;
httpd.serve_forever()
确保以上两个文件在同一个目录下,然后在命令行输入Python sevrer.py 来启动WSGI服务器。
Web框架
URL是什么?
简介
统一资源定位符(或称统一资源定位器/定位地址、URL地址等,英语:Uniform Resource Locator,常缩写为URL),有时也被俗称为网页地址(网址)。
如同在网络上的门牌,是因特网上标准的资源的地址(Address)。它最初是由 蒂姆·伯纳斯-李 发明用来作为万维网的地址。现在它已经被万维网联盟编制为因特网标准RFC 1738。
在互联网的历史上,统一资源定位符的发明是一个非常基础的步骤。统一资源定位符的语法是一般的,可扩展的,它使用ASCII代码的一部分来表示因特网的地址。统一资源定位符的开始,一般会标志着一个计算机网络所使用的网络协议。
统一资源定位符的标准格式如下:
协议类型:[//服务器地址[:端口号]][/路径]文件名[?查询][#片段]
语法
超文本传输协议(HTTP)的统一资源定位符将从因特网获取信息的五个基本元素包括在一个简单的地址中:
- 传送协议。
- 服务器。(通常为域名,有时为IP地址)
- 端口号。(以数字方式表示,若为HTTP的默认值“:80”可省略)
- 路径。(以“/”字符区别路径中的每一个目录名称)
- 查询。(GET模式的窗体参数,以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,通常以UTF8的URL编码,避开字符冲突的问题)
- 片段。以“#”字符为起点。
以http://zh.wikipedia.org:80/w/index.php?title=Special:%E9%9A%8F%E6%9C%BA%E9%A1%B5%E9%9D%A2&printable=yes 为例, 其中:
- http,是协议;
- zh.wikipedia.org,是服务器;
- 80,是服务器上的网络端口号;
- /w/index.php,是路径;
- ?title=Special:%E9%9A%8F%E6%9C%BA%E9%A1%B5%E9%9D%A2&printable=yes,是询问。
大多数网页浏览器不要求用户输入网页中“http://”的部分,因为绝大多数网页内容是超文本传输协议文件。同样,“80”是超文本传输协议文件的常用端口号,因此一般也不必写明。一般来说用户只要键入统一资源定位符的一部分(zh.wikipedia.org/wiki/Special:%E9%9A%8F%E6%9C%BA%E9%A1%B5%E9%9D%A2)就可以了。