09 基于模块wsgirefweb框架

模块引入

 真实开发中的python web程序,一般会分为两部分:

      服务器程序:负责对socket服务器进行封装,并在请求到来时,对请求的各种数据进行整理;

     应用程序:负责具体的逻辑处理。

        为了方便应用程序的开发,就出现了众多的Web框架,例如:DjangoFlaskweb.py 等。不同的框架有不同的开发方式,但是无论如何,开发出的应用程序都要和服务器程序配合,才能为用户提供服务。

       这样,服务器程序就需要为不同的框架提供不同的支持。这样混乱的局面无论对于服务器还是框架,都是不好的。对服务器来说,需要支持各种不同框架,对框架来说,只有支持它的服务器才能被开发出的应用使用。最简单的Web应用就是先把HTML用文件保存好,用一个现成的HTTP服务器软件,接收用户请求,从文件中读取HTML,返回。如果要动态生成HTML,就需要把上述步骤自己来实现。不过,接受HTTP请求、解析HTTP请求、发送HTTP响应都是苦力活,如果我们自己来写这些底层代码,还没开始写动态HTML呢,就得花个把月去读HTTP规范。

       正确的做法是底层代码由专门的服务器软件实现,我们用Python专注于生成HTML文档。因为我们不希望接触到TCP连接、HTTP原始请求和响应格式,所以,需要一个统一的接口协议来实现这样的服务器软件,让我们专心用Python编写Web业务。

这时候,标准化就变得尤为重要。我们可以设立一个标准,只要服务器程序支持这个标准,框架也支持这个标准,那么他们就可以配合使用。一旦标准确定,双方各自实现。这样,服务器可以支持更多支持标准的框架,框架也可以使用更多支持标准的服务器。

         WSGIWeb Server Gateway Interface)就是一种规范,它定义了使用Python编写的web应用程序与web服务器程序之间的接口格式,实现web应用程序与web服务器程序间的解耦。

        常用的WSGI服务器有uwsgiGunicorn。而Python标准库提供的独立WSGI服务器叫wsgirefDjango开发环境用的就是这个模块来做服务器。 

服务器serverpython程序(wsgiref模版):

 1 from wsgiref.simple_server import make_server
 2 
 3  
 4 
 5 def application(environ,start_response):
 6 
 7     """
 8 
 9     wsgiref.simple_server模块中的make_server方法调用的函数
10 
11     :param environ: wsgiref模块中封装好的包含http请求所有信息的字典
12 
13     :param start_response: wsgiref提供的内置方法(用于响应格式的发送)
14 
15     :return:返回给浏览器的信息(以[]包装的bytes类型)
16 
17     """
18 
19     # environ变量是模块自行封装好的http请求信息,以键值对的形式存在,可以直接字典取值
20 
21     print(environ)     
22 
23     print(environ["PATH_INFO"])         # 打印请求的文件路径   
24 
25     print(environ["REQUEST_METHOD"])    # 打印请求的方式 
26 
27  
28 
29 # 服务端响应格式信息(状态信息和请求头部)
30 
31     start_response("200 OK",[("Content-Type","text/html")]) 
32 
33    
34 
35     return [b'<h1>hello</h1>']  # 服务端返回数据用[]包装起来
36 
37  
38 
39 #进行bind端口绑定、listen监听、封装http请求信息、
40 
41 # 调用application函数(自动传递封装好的请求信息字典和wsgiref模块内置的响应格式发送函数)
42 
43 htttpd=make_server("127.0.0.1",8888,application)
44 
45 htttpd.serve_forever()          #accept获取客户端端的连接,开启线程、发送服务端的返回信息
服务器server端python程序(wsgiref模版)

相关文章:

  • 2022-01-22
  • 2021-12-28
  • 2021-06-29
  • 2021-06-05
  • 2021-07-04
  • 2021-04-19
  • 2021-07-04
  • 2021-10-29
猜你喜欢
  • 2022-12-23
  • 2022-02-18
  • 2022-12-23
  • 2022-12-23
  • 2021-07-13
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案