web-使用wsgiref模块模拟web框架

本节主要通过一个wsgiref模块

实现一个web服务器的功能

服务器可以帮我们解析HTTP的请求,也可以帮我们处理HTTP的一些响应

我们利用这个服务器来完成一个 简单的web框架

wsgiref 代码的基本结构

web-使用wsgiref模块模拟web框架_第1张图片

主要用到的是make_server这个东西

如何使用make_server,可以看一看源代码

web-使用wsgiref模块模拟web框架_第2张图片

通过源码我们明确了这个方法的参数的意义

web-使用wsgiref模块模拟web框架_第3张图片

回顾,我们以前写的mini-web框架

请求来了,我们通过conn.recv拿到了内容

拿到以后,需要自己去解析拿到请求的全部内容

然后从请求的全部内容中取出,请问的路径是哪里,带过来的参数有哪些,等等

那个时候涉及到socket

而这里,有了wsgiref模块

我们见不到socket

因为模块已经帮我们封装好了这些东西了

我们只需要按照方法对应所需的参数传值就可以

在方法的内部,帮我们搞定一切解析

》程序的功能

web-使用wsgiref模块模拟web框架_第4张图片

程序一旦运行,就会卡在15行

直到有连接到来,就会启动application

application,里面做主要的一些功能代码

最终返回结果

注意返回结果的格式 ,列表包字节

》试一试效果

web-使用wsgiref模块模拟web框架_第5张图片

》代码

from wsgiref.simple_server import make_server


def application(environ, start_response):

    start_response('200 ok', [('Content-Type', 'text/html')])
    return ["

hello,web".encode()] httpd = make_server("", 8080, application) print('服务器开始') httpd.serve_forever()

跑一跑试一试

运行起来后,访问

http://127.0.0.1:8080/

当前虽然实现了一个可以访问的实效

然而实际的生产环境并不会通过它来完成

因为他的性能并不是很好,能够支持更大的并发

并发指的就是多个用户同时访问的时候,他一个 处理的功能

》理解一下代码中的实现功能

web-使用wsgiref模块模拟web框架_第6张图片

更详细的说明,见

web-使用wsgiref模块模拟web框架_第7张图片

在这里插入图片描述

新目标,根据路径,响应不同内容

当访问的路径是

127.0.0.7:8080/python

的时候,期望返回对应的页面

第一步,我们要取出python,即要取出访问的路径

第二步,根据这个路径,返回对应的内容

在environ中,有一个键可以实现

在这里插入图片描述

》练一练,捕捉路径

当路径为python时,输出

hello python

当路径为jquery时,输入

jquery , write less , do more

》答案

。。。

根据不同的内容,响应页面

把页面响应过去

同样是上面的需求,我们返回html文件过去

web-使用wsgiref模块模拟web框架_第8张图片

路由,路径对应函数

后续反复的这样子添加 if 语句,很麻烦

web-使用wsgiref模块模拟web框架_第9张图片

更好的解决办法,把路径与对应的函数之间,做一个关联

定义一个路由函数

web-使用wsgiref模块模拟web框架_第10张图片

在应用中把代码改写成这样

web-使用wsgiref模块模拟web框架_第11张图片

参数-从请求对象中获取

需求

对于登陆函数而言

我们需要得到用户请求时带来的用户名和密码,然后才能够根据这个参数这样怎么过冬?对是的 数据库当中查询它是否存在

web-使用wsgiref模块模拟web框架_第12张图片

怎么解决呢?

思考。。。。。

》解决办法

参数传递

因为web服务器已经把请求所在的全部数据

web-使用wsgiref模块模拟web框架_第13张图片

明确,为什么要把environ传递过去

继续

在这里插入图片描述

》尝试从请求对象中,获取参数

可以模拟一个get 请求,带上参数

在这里插入图片描述

通过请求对象中的对应键来取值

web-使用wsgiref模块模拟web框架_第14张图片

让页面上显示动态的数据

之前的数据都是静态的

来一个例子

每一次访问,页面上显示时间

思考

我们需要从页面上做文章了

目标是html的内容

如何让html中的内容显示python确定好的数据呢?

分两步来实现

1,首先要生成数据,让页面可以获取

web-使用wsgiref模块模拟web框架_第15张图片

2,我们的目标是从html页面中显示内容

可以在html内容读出来后, 做一做手脚

首先,在静态页面中

web-使用wsgiref模块模拟web框架_第16张图片

然后,找到html代码中的这个占位符号,把它替换为我们的数据就可以了

web-使用wsgiref模块模拟web框架_第17张图片

再一次访问页面,问题就解决了。

》学习django的全部部骤,在上面的例子中已体现出来

  • 控制器,路由分发,router函数
  • 数据库,本例中通过动态的时间来模拟了数据库中的内容
  • 模板渲染,把html中的内容进行替换
  • 视图函数,我们写的一个又一个的功能函数

你可能感兴趣的:(web-使用wsgiref模块模拟web框架)