wsgi逻辑结构初探

web框架 = wsgi+逻辑处理app

接收请求,返回对应的内容

python wsgiref实现了wsgi规范.

from wsgiref.simple_server import make_server

def RunServer(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
return "<h1>maotai</h1>" if __name__ == '__main__':
httpd = make_server('', 8080, RunServer)
print 'http://127.0.0.1:8080'
httpd.serve_forever()

访问http://127.0.0.1:8080

打断点,看下wsgi给environ传了什么参数: 里面包含url

实现不同的请求由不同的逻辑模块处理

from wsgiref.simple_server import make_server

def new():
return "new" def bbs():
return "bbs" urls = {
"/new": new,
"/bbs": bbs,
} def RunServer(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html')]) # 获取url
url = environ["PATH_INFO"] # 根据url路由
if url == "/new":
msg = new()
elif url == "/bbs":
msg = bbs()
else:
msg = "404"
return msg if __name__ == '__main__':
httpd = make_server('', 8080, RunServer)
print("http://127.0.0.1:8080")
httpd.serve_forever()

优化urls写法

from wsgiref.simple_server import make_server

def new():
return "new" def bbs():
return "bbs" urls = {
"/new": new,
"/bbs": bbs
} def RunServer(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
url = environ["PATH_INFO"]
# 当url在urls里时,获取到url对应的view名
if url in urls.keys():
func_name = urls[url]
res = func_name()
else:
res = "404"
return res if __name__ == '__main__':
httpd = make_server('', 8003, RunServer)
print("http://127.0.0.1:8003")
httpd.serve_forever()

将一整坨代码模块化-搞成mvc模式

拆分有2个原因:

  • 项目大了,代码多了,拆分方便管理
  • 拆分模块化简化复用

controller.py: 通过file操作,获取模板内容,返回

def new():
# return "index"
f=open("./index.html",'r')
tmpl = f.read()
f.close()
return tmpl def bbs():
return "bbs"

urls.py

import controller
urls={
"/new":controller.new,
"/bbs":controller.bbs,
}

start.py

from wsgiref.simple_server import make_server
from urls import urls def RunServer(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
url = environ["PATH_INFO"]
if url in urls.keys():
msg = urls[url]()
else:
msg = "404"
return msg if __name__ == '__main__':
httpd = make_server('', 8003, RunServer)
print "http://127.0.0.1:8003"
httpd.serve_forever()

template: 返回time到网页: 字符串replace





index.html

<body>
here is maotai's bbs
<h1>{{item}}</h1>
</body>

controller.py

思路: 使用字符串替换方法替换html中的指定字符

import os
import time def bbs():
f = open(os.path.join("views", "bbs.html"), 'r')
html = f.read()
f.close()
html = html.replace("{{item}}", str(time.time()))
return html

template: 使用jinjia2渲染模板

jinjia2使用参考

controller.py: 使用jinjia2渲染(字符串替换思路一样,只不过在html里支持循环等语法.)

import os
from jinja2 import Template def bbs():
f = open(os.path.join("views", "bbs.html"), 'r')
html = f.read()
f.close()
tmp=Template(html)
# 使用jinjia2渲染(字符串替换思路一样)
html=tmp.render(name="maotai",user_list=['maotai','alice','cristin'])
return html.encode("utf-8")

最新文章

  1. 急!JDBC问题,发生通信错误。错误位置:Reply.fill()。消息:数据不足。 ERRORCODE=-4499, SQLSTATE=08001
  2. window7安装git详解
  3. spark中streamingContext的使用详解
  4. Dictionary 的使用
  5. python2.7之乱码问题(直接从我的csdn上复制粘贴过来的。。。)
  6. Java 内存区域
  7. nodejs-日常练习记录-使用express搭建static服务器.
  8. 论在Repository中使用EF框架
  9. 有哪些适合学生参与的 C++,网络编程方面的开源项目?
  10. vs2010更改默认环境设置
  11. iOS软件架构——架构模式(Architectural Pattern)
  12. 开源 &amp; 在线免费使用:升讯威 周报系统
  13. ubuntu12.04:Tomcat 7服务器:手动安装
  14. Spring中bean的注入方式
  15. ansible小计
  16. element 时间选择器——年
  17. 多线程this逃逸
  18. 在eclipse中从cvs下载项目,再部署到tomcat常见错误!
  19. Django REST framework 第七章 Schemas &amp; client libraries
  20. C++学习笔记45:多态性

热门文章

  1. Node.js- sublime搭建node的编译环境
  2. jQuery的回调管理机制
  3. C# XtraGrid的行指示器(RowIndicator)行号以及图标设置
  4. Kafka+Storm+HDFS 整合示例
  5. JVM工具jinfo实践
  6. nginx 日志文件
  7. 虚拟机VMware怎么完全卸载干净,如何彻底卸载VMware虚拟机
  8. OC开发_整理笔记——友盟分享(社交化组件)
  9. Spark2 文件处理和jar包执行
  10. mysql语句性能分析