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

本文介绍使用Python的wsgiref模块搭建简易Web服务器的方法,并通过实例展示如何创建一个基本的Web框架。涵盖请求处理、动态内容生成及路由分发等关键技术。

本节主要通过一个wsgiref模块

实现一个web服务器的功能

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

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

wsgiref 代码的基本结构

在这里插入图片描述

主要用到的是make_server这个东西

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

在这里插入图片描述

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

在这里插入图片描述

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

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

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

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

那个时候涉及到socket

而这里,有了wsgiref模块

我们见不到socket

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

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

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

》程序的功能

在这里插入图片描述

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

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

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

最终返回结果

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

》试一试效果

在这里插入图片描述

》代码

from wsgiref.simple_server import make_server


def application(environ, start_response):

    start_response('200 ok', [('Content-Type', 'text/html')])
    return ["<h1>hello,web".encode()]


httpd = make_server("", 8080, application)

print('服务器开始')

httpd.serve_forever()

跑一跑试一试

运行起来后,访问

http://127.0.0.1:8080/

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

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

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

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

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

在这里插入图片描述

更详细的说明,见

在这里插入图片描述

在这里插入图片描述

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

当访问的路径是

127.0.0.7:8080/python

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

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

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

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

在这里插入图片描述

》练一练,捕捉路径

当路径为python时,输出

hello python

当路径为jquery时,输入

jquery , write less , do more

》答案

。。。

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

把页面响应过去

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

在这里插入图片描述

路由,路径对应函数

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

在这里插入图片描述

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

定义一个路由函数

在这里插入图片描述

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

在这里插入图片描述

参数-从请求对象中获取

需求

对于登陆函数而言

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

在这里插入图片描述

怎么解决呢?

思考。。。。。

》解决办法

参数传递

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

在这里插入图片描述

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

继续

在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述

让页面上显示动态的数据

之前的数据都是静态的

来一个例子

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

思考

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

目标是html的内容

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

分两步来实现

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

在这里插入图片描述

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

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

首先,在静态页面中

在这里插入图片描述

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

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲸鱼编程pyhui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值