构建一个web应用
用pip从命令行安装Flask:

flask开始工作:flask提供了一组模块,可以帮助你构建服务器端web应用,从理论上讲,这是一个微web框架,因为它值提供了完成这个任务所需的最基本的一组技术,这意味着flask的特性没有其它框架那么全面,如django(所有的python web 框架之母),不过flask是轻量级的,规模很小而且易于使用,由于我们的需求不多,只有两个web页面,所以在这里flask作为web框架完全能够胜任。
在python文件夹中新建一个webapp文件夹,里面写一个py文件:

在此文件夹中打开命令窗口,输入下面的指令,启动flask应用:

不论我们在哪一个操作系统上运行,从现在开始,都会由flask接管,只要它的内置web服务器完成任何操作,都会在屏幕上显示状态信息。启动之后,flask web服务器会立即确认它已经启动,开始运行并在flask测试web地址(127.0.0.1:5000)和协议端口(5000)上等待为web请求提供服务。
flask上的web服务器已经准备就绪,正在等待,下面使用我们的web浏览器与这个web服务器交互,打开浏览器,键入URL,显示如下:


此时,Flask会启动它的内置Web服务器,并在这个服务器中运行你的Web应用代码。Web服务器接收到指向“/”URL的任何请求时,会响应“Hello world from Flask!”消息,而指向其它URL的请求时会得到一个404“Resource not found”错误消息。要看这里的错误处理,我们可以进行如下操作:

终端窗口中运行的Web应用也会用一个适当的消息更新状态:

接下来,我们考虑Flask为我们做了什么:它提供了一种机制,利用这种机制你可以执行任何已有的Python函数,并在一个Web浏览器中显示它的输出。
为了向你的Web应用增加更多功能,所要做的只是确认希望将函数与哪个URL关联,然后在完成具体工作的函数上面编写一个适当的@app.route修饰符号。
将webapp文件夹下的hello_flask文件重命名为vsearch4web,开始我们的web构建之旅。
修改源代码为如下(vsearch4web.py)

向webapp文件夹中增加所需文件:




下面对目前已构建的web应用进行测试:

当我们键入任意phrase时,点击do it ,出现以下画面:

如果我们的web应用出现了问题,web服务器会响应一个HTTP状态码。HTTP是允许web浏览器和服务器通信的协议。状态码的含义很明确(具体信息请参考有关文献)。实际上,每个web请求都会生成一个HTTP状态码响应。
这里出现了405状态码,是客户端错误消息:服务器从客户端接收到一个它不理解也无法处理的请求。通常这是客户端的问题。指示客户端使用了这个服务器不允许的一个HTTP方法来发送请求。常见的HTTP方法有get方法和post方法。

我们通过修改源代码,使其支持POST方法(支持POST方法则不支持GET方法):

再次修改vsearch4web源代码,使其打开调试模式:


既然已经再一次运行,下面再与我们的web应用交互:


但是这里出现一个问题,无论你键入什么phrase,返回的结果都是一样的。需要我们重新检查请求/search4 URL时执行的代码:(需要用到request内置对象)

重新测试:


到了这里,生成的输出还不是一个HTML Web页面,它还只是原始数据,作为文本返回给正在等待的浏览器。修改我们的vsearch4web.py,如下

再次测试:

by PengSW_10 on 2019/1/26