服务器动态资源请求

1,浏览器请求动态页面过程

这里写图片描述
这里写图片描述

  • 1),浏览器向web服务器动态发起请求
  • 2),web服务器通过wsgi调用框架的def application()
  • 3),框架通过调用web服务器def set_response_header()方法,设置返回的响应状态和响应头信息
  • 4),调用返回,此时web服务器端保持刚刚设置的信息
  • 5),查询数据库,生成动态页面的body信息,
  • 6), 框架返回 响应body给web服务器
  • 7),web服务器把数据返回给浏览器

2. WSGI

  • 怎么在你刚建立的Web服务器上运行一个Django应用和Flask应用,如何不做任何改变而适应不同的web架构呢?

  • 在以前,选择 Python web 架构会受制于可用的web服务器,反之亦然。如果架构和服务器可以协同工作,那就好了:
    这里写图片描述

  • 但有可能面对(或者曾有过)下面的问题,当要把一个服务器和一个架构结合起来时,却发现他们不是被设计成协同工作的:
    这里写图片描述
  • 那么,怎么可以不修改服务器和架构代码而确保可以在多个架构下运行web服务器呢?答案就是 Python Web Server Gateway Interface (或简称 WSGI,读作“wizgy”,python 前端服务器通道接口)。
  • 这里写图片描述
  • WSGI允许开发者将选择web框架和web服务器分开。可以混合匹配web服务器和web框架,选择一个适合的配对。比如,可以在Gunicorn 或者 Nginx/uWSGI 或者 Waitress上运行 Django, Flask, 或 Pyramid。真正的混合匹配,得益于WSGI同时支持服务器和架构:
    这里写图片描述

3,定义WSGI接口

  • WSGI接口定义非常简单,它只要求Web开发者实现一个函数,就可以响应HTTP请求:
# 这是web服务器
def set_response_header(status, headers):
    # 保存 响应头信息
    self.status = status
    self.headers = headers

# 当接收到浏览器的一个请求并判断是动态资源的请求时;调用框架的application()
body = framework.application(environ,set_response_header)

response = self.headers + body
# 这是框架
def application(environ, set_response_header):
    """
     application是在框架中定义,在服务器中被调用
     set_response_header 是服务器中的一个设置响应头信息的函数
    """
    # 回调web服务器中的set_response_header(),将状态码、响应头信息以参数的形式传过去
    set_response_header('200 OK', [('Content-Type', 'text/html')])
    # 查询数据库等操作
    return 'Hello World!'
  • 上面的application()函数就是符合WSGI标准的一个HTTP处理函数,它接收两个参数:

  • environ:一个包含所有HTTP请求信息的dict对象;

  • set_response_header:一个发送HTTP响应的函数。

  • application()函数必须由WSGI服务器来调用

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值