Django-wsgi实例
2024-09-30 00:48:24
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()
最新文章
- notifyDataSetInvalidated和notifyDataSetChanged有什么区别
- ubuntu 挂载windows共享目录的方法
- eclipse快速收缩展开代码
- 实用Linux命令,不求最全但求实用-------磁盘使用情况du,df
- Emmet的高级功能与使用技巧
- 【转】10分钟搭建NDK的Android开发环境
- noip 2012 借教室 (线段树 二分)
- [转]easyui常用控件及样式收藏
- 提高java编程质量 - (三)三目运算符的两个操作数类型尽量一致
- oracle linux 7.3 下用dtrace 跟踪 mysql-community-server-5.6.20
- spark2.1:使用df.select(when(a===b,1).otherwise(0))替换(case when a==b then 1 else 0 end)
- UOJ#37. 【清华集训2014】主旋律
- C#的抽象类和接口,区别与相似
- luogu P1578 奶牛浴场
- spring boot 给返回值加状态 BaseData
- 洛谷 质因子分 p2043
- layui(六)——upload组件常见用法总结
- 抽离amazeUI里面的弹出框
- 【Android】5.0 第5章 常用基本控件--本章示例主界面
- jsp+servlet+javabean开发web项目
热门文章
- Swift 3:新的访问控制fileprivate和open
- 【Luogu】P3343地震后的幻想乡(对积分概率进行DP)
- 刷题总结——regular words(hdu1502 dp+高精度加法+压位)
- java面试题之如何中断一个线程?
- &#39;Add Solution&#39;: A timeout has occurred while invoking commands in SharePoint host process.
- Best Coder Lotus and Characters
- 下拉菜单的option的value属性值问题
- 10深入理解C指针之---指针运算和比较
- Word Ladder系列
- PHPCMS内链设置,PHPCMS关联链接设置