# -*- coding:utf-8 -*-

 # date : 2017/12/22
from wsgiref.simple_server import make_server
# 首先是导入wsgi服务器里的make_server模块
def routers():
urlpatterns = (
("/book",func1),
("/web",func2),
("/main",func3),
)
return urlpatterns
# 用函数来封装一个元祖(用字典也行),里面写的是一组组匹配的path 和 执行函数 也就是要返回给html的内容
def func1(environ):
return [b"<h1>hello,book</h1>"]
def func2(environ):
return [b"<h1>hello,web</h1>"]
def func3(environ):
return [b"<h1>hello,main</h1>"]
# 3个返回函数里对应return的内容 def application(environ,start_response):
# application这里是固定参数传递environ,start_response,虽然是形参,但是必须要这么写,这个application方法自己调用是没有任何效果的
# environ是监听启动后传给服务端的请求包,有请求头和请求体等数据以字符串的形式发来,由服务端模块解析成一个个键值对
print(environ["PATH_INFO"])
# ["PATH_INFO"]是environ 请求数据里的请求地址url后缀,比如淘宝网是www.taobao.com 我们想访问他页面里的聚划算,点击后浏览器的url会由www.taobao.com变成www,taobao.com/********, 而/*******就是environ["PATH_INFO"
path = environ["PATH_INFO"]
#把后缀赋给一个变量path
start_response("200 ok",[("Content-Type","text/html")])
#这里是给返回头里加入返回状态"200 ok"和返回格式[("Content-Type","text/html")],告诉他我们返回的是一个html文档
urlpatterns=routers()
# 把存入元祖地址数据的函数实例化 赋给一个变量
fun = None
#先申明一个变量fun为None
for i in urlpatterns:
if i[0] == path:
fun = i[1]
break
# 遍历我们数据里的后缀i[0]是否有和浏览器请求的数据后缀environ["PATH_INFO"]相同的,如果有把i[1]的函数名传给刚才声明的fun(也是为了把for循环里的数据i[1]转成函数内的全局变量,提高作用域)
if fun:
return fun(environ)
else:
return [b"<h1>404!对不起找不到你想要的内容,请输入正确网址!</h1>"]
# 如果有匹配的数据.则返回对应函数fun(),注意我们为什么必须要传个参数environ,本例里也没有用到这个参数,是因为这是一种规范的格式,environ里是对面发送请求里的数据,里面包含很多有用的信息,可以在fun()里提取判读
httpd = make_server("127.0.0.1",8088,application) #这里也是一种固定写法make_server后面传的3个参数分别是服务端ip地址,服务端口号,application就是整个处理信息接受的方法(请求-返回)
print('Serving HTTP on port 8088...')
httpd.serve_forever()
#开启监听服务端 这时候我们用浏览器访问127.0.0.1:8088/book 或者 127.0.0.1:8088/web 就有页面显示出来

最新文章

  1. 在Linux虚拟机下配置tomcat
  2. phpcms v9 黄页实现手机访问手机版,电脑访问电脑版(双模板)
  3. js 中escape,encodeURI,encodeURIComponent的区别
  4. C语言中 *.c和*.h文件的区别!
  5. jquery.qrcode.js 插件生成二维码
  6. 程序员是怎么炼成的---OC题集--练习答案与题目(3)
  7. Model元数据解析
  8. Android开发之旅:环境搭建及HelloWorld
  9. hdu 4828 Grids(拓展欧几里得+卡特兰数)
  10. Sublime Text 2中前端必备的常用插件
  11. node.js常见错误及解决办法
  12. Nginx配置参数中文说明
  13. C# winform 播放资源中的音频文件
  14. Linux saltstack常用模块
  15. 三个水杯——java,广度优先搜索
  16. BI-LSTM and CRF using Keras
  17. Unity3D笔记 Collect
  18. poj2253 最短路
  19. asp.net mvc 5框架揭秘(文摘)
  20. 后台UI模板开发规范

热门文章

  1. Backup--修改实例级别是否使用压缩备份的默认值
  2. C++三种野指针及应对/内存泄露
  3. ASP .Net Core 2.0 修改默认端口
  4. Nginx源码编译
  5. Python短路原则
  6. python urllib2 对 http 的 get,put,post,delete
  7. 牛客挑战赛30D 小A的昆特牌(组合数学)
  8. [Python]json 错误xx is not JSON serializable
  9. pydicom读取dicom文件报错
  10. thinkphp5.1的安装