Python--Demo15--WEB应用程序WGSI接口

一、HTTP协议:

组装好HTTP请求对象Request,发送给服务器后,我们会得到响应对象Response。这就是我们熟悉的HTTP协议。

每个HTTP请求和响应都遵循相同的格式,一个HTTP包含起始行、Headers和Body三部分,Body是可选的。

HTTP GET请求格式

GET /path HTTP/1.0
Header1:value1
Header2:value2
Header3:value3

HTTP PSOT请求格式

POST /path HTTP1.0
Header1:value1
Header2:value2
Header3:value3


body data xxxxx

HTTP 响应格式

200 ok
Header1:value1
Header2:value2
Header3:value3


body data xxxxx

说明:当报文信息的,头部后面出现换行的时候,就是body部分了。

二、WSGI接口:Web Server Gateway Interface --Web网关接口。

我们知道,一个WEB应用的本质就是:

  • 浏览器发送一个HTTP请求
  • 服务器接收到请求,生成一个HTML文档
  • 服务器把HTML文档作为HTTP响应的body部分发送给浏览器
  • 浏览器接收到HTTP响应,从HTTP的body中取出HTML文档并显示

我们要实现一个WEB应用的时候,把用户需要的HTML文件保存好用一个HTTP服务器软件处理用户请求,返回他想要的文件就行。这些IIS、Nginx、Apache等都可以胜任,我们并不需要处理HTTP请求和组装HTTP响应;

但是如果用户请求的是一些动态内容,比如我们要动态生成HTML文件,生成HTML还好说,但是处理HTTP请求信息和HTTP响应信息一定是工作量巨大的,我们要完成HTTP底层的编写,需要大量的时间,还不一定写的就没有BUG。所以Python为了让我们专心写业务代码,他提供了于HTTP、TCP打交道的接口,叫做WSGI。

WSGI接口定义:

def application(enviro,start_response):
    start_response('200 ok',[('Content-Type','text/html')])
    return [b'<h1>你好。。。</h1>']

说明:eviron是包含所有HTTP请求信息的字典对象;start_response是一个发送HTTP响应的函数。return数据作为body发送给浏览器。

调用一次start_response()函数,就发送了一次HTTP响应的Header。start_response()函数第一个参数是HTTP报文起始行--响应码、第二个参数是HTTP报文--头部字段。

WSGI接口说明:

从environ对象中拿到HTTP请求信息,然后根据需求构造HTML,再通过start_response()发送响应Header,最后返回响应Body。

有了这个接口,你不用关心HTTP报文如何解析,是不是很方便。

WSGI接口调用:

WSGI接口要求传入envrion和start_response两个参数,我们都没法提供啊!python内置了一个WSGI服务器,它能够调用application(),这个模块叫wsgiref。下面是一个测试:

1、编写myapp.py来实现WEB应用程序的WSGI处理函数:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# 入口
def application(environ,start_response):
    start_response('200 ok',[('Content-Type','text/html')])
    return [b'<h1>welcome here</h1>']

2、编写一个server.py,负责启动WSGI服务器,来加载WSGI函数:

from wsgiref.simple_server import make_server

from complexapp import application

#创建一个服务 IP地址为空 端口8000 处理函数application
http_server=make_server('',8000,application)
print('服务开启在8000这个端口上...')
#开始监听HTTP请求
http_server.serve_forever()

3、在命令行中,运行server.py文件来启动WSGI服务器,在浏览器中输入127.0.0.1:8000查看结果:

 在浏览器中输入:127.0.0.1:8000就可以看到我们application中return的结果:

4、 在命令行中按下CTRL+C就可以终止WEB服务。

最后:麻雀虽小五脏俱全,再复杂的WEB应用程序,入口都是一个WSGI处理函数。

原文地址:https://www.cnblogs.com/bigbosscyb/p/12366466.html