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

python web 框架的基本逻辑练习题的更多相关文章

  1. Python Web框架

    本节对Python Web框架学习 一.MTVModel: 存放所有数据库相关文件Template:模板文件,存放html文件View: 业务处理,即函数文件 二.MVCmodel: 存放数据库相关文 ...

  2. 一步一步理解 python web 框架,才不会从入门到放弃

    要想清楚地理解 python web 框架,首先要清楚浏览器访问服务器的过程. 用户通过浏览器浏览网站的过程: 用户浏览器(socket客户端) 3. 客户端往服务端发消息 6. 客户端接收消息 7. ...

  3. 浅谈Python web框架

    一.Python web框架 Web Framework,Ruby的世界Rails一统江湖,而Python则是一个百花齐放的世界,各种micro-framework.framework不可胜数,不完全 ...

  4. python web框架介绍对比

    Django Python框架虽然说是百花齐放,但仍然有那么一家是最大的,它就是Django.要说Django是Python框架里最好的,有人同意也有人 坚决反对,但说Django的文档最完善.市场占 ...

  5. python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架

    Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...

  6. 自定义python web框架

    -- Bootstrap http://www.bootcss.com/ -- Font Awesome http://fontawesome.io/ -- bxslider http://bxsli ...

  7. Python Web框架Tornado的异步处理代码演示样例

    1. What is Tornado Tornado是一个轻量级但高性能的Python web框架,与还有一个流行的Python web框架Django相比.tornado不提供操作数据库的ORM接口 ...

  8. Django,Flask,Tornado三大框架对比,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架

    Django 与 Tornado 各自的优缺点Django优点: 大和全(重量级框架)自带orm,template,view 需要的功能也可以去找第三方的app注重高效开发全自动化的管理后台(只需要使 ...

  9. 关于Python Web框架——Tornado

    关于Tornado的入门看这篇文章,写的非常好: https://zhuanlan.zhihu.com/p/37382503 Tornado 是一个Python web框架和异步网络库,使用非阻塞网络 ...

随机推荐

  1. jquery stop(true,false)的意思

    stop 是jQuery中用于控制页面动画效果的方法.运行之后立刻结束当前页面上的动画效果.stop在新版jQuery中添加了2个参数:第一个参数的意思是是否清空动画序列,也就是stop的是当前元素的 ...

  2. ASP.NET MVC 使用过滤器需要注意

    想往下继续执行就return~

  3. MySQL8.0本地访问设置为远程访问权限

    1.登录MySQL mysql -u root -p 输入您的密码 2.选择 mysql 数据库 use mysql; 因为 mysql 数据库中存储了用户信息的 user 表. 3.在 mysql ...

  4. UML uml建模工具

    UML建模工具 一.UML的概念: 参考百度百科: https://baike.baidu.com/item/%E7%BB%9F%E4%B8%80%E5%BB%BA%E6%A8%A1%E8%AF%AD ...

  5. C++中引用的形参使用

    引用解释: (1)引用仅是变量的别名,而不是实实在在地定义了一个变量,因此引用本身并不占用内存,而是和目标变量共同指向目标变量的内存地址,即共用内存 (2)引用和目标变量的地址是一样的,对引用的操作与 ...

  6. (php脚本自研分享)•通用型保存网站用户密码到css文件

    本文原创作者:Laimooc(原名xoanHn) 很多时候呢,我们拿到一个shell以后,偶尔会遇到密码解不了的情况,用xss收集cookie吧,感觉不方便:利用xss平台劫持表单吧,感觉麻烦,也会担 ...

  7. 分享VMware题目解答

    VMnet1是主机模式.是一个Host-Only网络模式 192.168.1.254/24VMnet8是NAT模式.是一个NAT方式,最简单的组网方式VMnet6是手动设置的(主机.net.内部) 1 ...

  8. python difflib详解

    difflib -帮助进行差异化比较 这个模块提供的类和方法用来进行差异化比较,它能够生成文本或者html格式的差异化比较结果,如果需要比较目录的不同,可以使用filecmp模块. class dif ...

  9. 条目二十三《考虑用排序的vector替代关联容器》

    条目二十三<考虑用排序的vector替代关联容器> 在看到这个条目的标题的时候,说实话,我一下子是比较懵逼的.这个结论怎么和数据结构的时间复杂度不一致了? 一般来说,像map,set等关联 ...

  10. leetcode-788-Rotated Digits(使用vector替代if else的逐个判断)

    题目描述: X is a good number if after rotating each digit individually by 180 degrees, we get a valid nu ...