本节主要通过一个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()
跑一跑试一试
运行起来后,访问
》
当前虽然实现了一个可以访问的实效
然而实际的生产环境并不会通过它来完成
因为他的性能并不是很好,能够支持更大的并发
并发指的就是多个用户同时访问的时候,他一个 处理的功能
》理解一下代码中的实现功能
更详细的说明,见
新目标,根据路径,响应不同内容当访问的路径是
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中的内容进行替换
- 视图函数,我们写的一个又一个的功能函数