用Python进行web开发
-
浏览器发送一个HTTP请求;
-
服务器收到请求,生成一个HTML文档;
-
服务器把HTML文档作为HTTP响应的Body发送给浏览器;
-
浏览器收到HTTP响应,从HTTP Body取出HTML文档并显示。(2-4都是http的协议规范)
application()
函数就是符合WSGI标准的一个HTTP处理函数,它接收两个参数:
-
environ:一个包含所有HTTP请求信息的
dict
对象; -
start_response:一个发送HTTP响应的函数。
在application()
函数中,调用:
start_response('200 OK', [('Content-Type', 'text/html')])
就发送了HTTP响应的Header,注意Header只能发送一次,也就是只能调用一次start_response()
函数。start_response()
函数接收两个参数,一个是HTTP响应码,一个是一组list
表示的HTTP Header,每个Header用一个包含两个str
的tuple
表示。
通常情况下,都应该把Content-Type
头发送给浏览器。其他很多常用的HTTP Header也应该发送。
然后,函数的返回值'<h1>Hello, web!</h1>'
将作为HTTP响应的Body发送给浏览器。
有了WSGI,我们关心的就是如何从environ
这个dict
对象拿到HTTP请求信息,然后构造HTML,通过start_response()
发送Header,最后返回Body。
整个application()
函数本身没有涉及到任何解析HTTP的部分,也就是说,底层代码不需要我们自己编写,我们只负责在更高层次上考虑如何响应请求就可以了。
不过,等等,这个application()
函数怎么调用?如果我们自己调用,两个参数environ
和start_response
我们没法提供,返回的str
也没法发给浏览器。
所以application()
函数必须由WSGI服务器来调用。有很多符合WSGI规范的服务器,我们可以挑选一个来用。但是现在,我们只想尽快测试一下我们编写的application()
函数真的可以把HTML输出到浏览器,所以,要赶紧找一个最简单的WSGI服务器,把我们的Web应用程序跑起来。
好消息是Python内置了一个WSGI服务器,这个模块叫wsgiref,它是用纯Python编写的WSGI服务器的参考实现。所谓“参考实现”是指该实现完全符合WSGI标准,但是不考虑任何运行效率,仅供开发和测试使用。
(3)运行wsgi服务我们先编写hello.py
,实现Web应用程序的WSGI处理函数:
# hello.py
def application(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
return '<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()
确保以上两个文件在同一个目录下,然后在命令行输入python server.py
来启动WSGI服务器。
二、打包py文件,生成exe可执行文件
以上py编写完成,可以用pyexe或pyinstaller工具来打包生成可执行文件exe:
如何使用PyInstaller将Python代码转换成exe文件
最近在琢磨将写好的.py脚本转换成.exe可执行文件,特意记录一下。
安装PyInstaller
前提是安装了pip(不会的朋友请自行搜索),在CMD中输入pip install PyInstaller
,一键式安装
安装好后,我们可以在Python的Script目录下成功发现”pyinstaller.exe”文件。
TIPS:安装完后,在使用过程中可能会出现如下报错[failedto create process]
,该问题的原因是我们的Python安装路径中有空格,如:C:\Program Files (x86)\Python34\Scripts
。这时,有两中解决办法:第一,重新安装Python,将其放置与没有空格的路径(听上去都觉得麻烦);第二,将Python/Script目录下的pyinstaller-script.py
里的路径加上引号,如下图为加上引号后的效果
使用PyInstaller
提前写好需要转换的Python脚本,并在CMD中输入命令格式为:
pyinstaller [参数] [脚本路径] ,
该参数包括:-F
, --onefile Py代码只有一个文件-D
, --onedir Py代码放在一个目录中(默认是这个)-K
, --tk 包含TCL/TK-d
, --debug 生成debug模式的exe文件-w
, --windowed, --noconsole 窗体exe文件(WindowsOnly)-c
, --nowindowed, --console 控制台exe文件(WindowsOnly)-X
, --upx 使用upx压缩exe文件-o DIR
, --out=DIR 设置spec文件输出的目录,默认在PyInstaller同目录-v
FILE, --version=FILE 加入版本信息文件
如下面栗子:
执行该代码后,我们能在生成的dist文件下找到我们的exe文件,该文件即为我们希望得到的目标exe文件。