• 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处理函数。

  • 相关阅读:
    Ubuntu14.04+cuda 7.5+cudnn_v4+tensorflow安装
    error C2275: “XXX”: 将此类型用作表达式非法
    DLL调试方法
    OpenCV ——双线性插值(Bilinear interpolation)
    OpenCV ——背景建模之CodeBook(2)
    OpenCV ——背景建模之CodeBook(1)
    OpenCV——GMM混合高斯模型
    OpenCV——运用于pixels war游戏
    【SpringSecurityOAuth2】源码分析@EnableOAuth2Sso在Spring Security OAuth2 SSO单点登录场景下的作用
    【Spring】简述@Configuration配置类注册BeanDefinition到Spring容器的过程
  • 原文地址:https://www.cnblogs.com/bigbosscyb/p/12366466.html
Copyright © 2020-2023  润新知