wsgiref实现了wsgi,他会将复杂的http请求经过处理,得到Django需要的格式,可以说他是一个接口,一端传入数据,一端处理数据

传统的socket实现

import socket

def handle_request(client):

    buf = client.recv(1024)
print(buf) client.send("HTTP/1.1 200 OK\r\n\r\n<h1 style='color:red'>Hello, Mr_zhang</h1>".encode("utf8")) def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('localhost',8001))
sock.listen(5) while True:
connection, address = sock.accept()
handle_request(connection)
connection.close() if __name__ == '__main__': main()

采用wsgiref实现

from wsgiref.simple_server import make_server

def application(environ, start_response):
# environ : 所有的请求数据
start_response('200 OK', [('Content-Type', 'text/html')]) return [b"<h1>HELLO Mr_zhang</h1>",] s=make_server("127.0.0.1",8080,application)
print("server is working...")
s.serve_forever()

Django内部已经处理了wsgi相关·······

模拟数据交互
from wsgiref.simple_server import make_server def f1(req):
print(req)
print(req["QUERY_STRING"]) f1=open("index1.html","rb")
data1=f1.read()
return [data1] def f2(req): f2=open("index2.html","rb")
data2=f2.read()
return [data2] import time def f3(req): #模版以及数据库 f3=open("index3.html","rb")
data3=f3.read()
times=time.strftime("%Y-%m-%d %X", time.localtime())
data3=str(data3,"utf8").replace("!time!",str(times)) return [data3.encode("utf8")] def routers(): urlpatterns = (
('/test1',f1),
('/test2',f2),
("/time",f3)
)
return urlpatterns def application(environ, start_response): print(environ['PATH_INFO'])
path=environ['PATH_INFO']
start_response('200 OK', [('Content-Type', 'text/html')]) urlpatterns = routers()
func = None
for item in urlpatterns:
if item[0] == path:
func = item[1]
break
if func:
return func(environ)
else:
return ["<h1>404</h1>".encode("utf8")] httpd = make_server('', 8080, application) print('Serving HTTP on port 8080...') # 开始监听HTTP请求: httpd.serve_forever()

最新文章

  1. notifyDataSetInvalidated和notifyDataSetChanged有什么区别
  2. ubuntu 挂载windows共享目录的方法
  3. eclipse快速收缩展开代码
  4. 实用Linux命令,不求最全但求实用-------磁盘使用情况du,df
  5. Emmet的高级功能与使用技巧
  6. 【转】10分钟搭建NDK的Android开发环境
  7. noip 2012 借教室 (线段树 二分)
  8. [转]easyui常用控件及样式收藏
  9. 提高java编程质量 - (三)三目运算符的两个操作数类型尽量一致
  10. oracle linux 7.3 下用dtrace 跟踪 mysql-community-server-5.6.20
  11. spark2.1:使用df.select(when(a===b,1).otherwise(0))替换(case when a==b then 1 else 0 end)
  12. UOJ#37. 【清华集训2014】主旋律
  13. C#的抽象类和接口,区别与相似
  14. luogu P1578 奶牛浴场
  15. spring boot 给返回值加状态 BaseData
  16. 洛谷 质因子分 p2043
  17. layui(六)——upload组件常见用法总结
  18. 抽离amazeUI里面的弹出框
  19. 【Android】5.0 第5章 常用基本控件--本章示例主界面
  20. jsp+servlet+javabean开发web项目

热门文章

  1. Swift 3:新的访问控制fileprivate和open
  2. 【Luogu】P3343地震后的幻想乡(对积分概率进行DP)
  3. 刷题总结——regular words(hdu1502 dp+高精度加法+压位)
  4. java面试题之如何中断一个线程?
  5. &#39;Add Solution&#39;: A timeout has occurred while invoking commands in SharePoint host process.
  6. Best Coder Lotus and Characters
  7. 下拉菜单的option的value属性值问题
  8. 10深入理解C指针之---指针运算和比较
  9. Word Ladder系列
  10. PHPCMS内链设置,PHPCMS关联链接设置