django源码笔记-【1】(转)
2014-04-04 12:47
351 查看
add by zhj:第二段代码有修改
原文:http://www.cnblogs.com/gaott/archive/2012/02/28/2371181.html
首先需要简要介绍以下WSGI。
在此接口中定义了一个服务器和应用程序通信的方法:
服务器传递两个参数:environ,start_response到我们的应用程序中,我们根据自己的业务逻辑处理后, 调用start_response返回相应代码和响应头信息,并在方法的最后返回相应的内容。假设将此app.py部署在 服务器上,那么用户访问时,服务器将会返回 Hello world 字符串,并带着相应头信息。
代码思路: 创建一个view(view_def),给view包裹Middleware(pre_middle、post_middle),然后开启一个服务器(eventlet)并监听1234端口,若有请求,那么系统的处理顺序是:
Request -> pre_middle -> view_def -> post_middle -> Response
![](http://pic002.cnblogs.com/images/2012/379362/2012022810514813.png)
![](http://images.cnitblog.com/i/564326/201404/041612382345235.png)
后台输出:
![](http://pic002.cnblogs.com/images/2012/379362/2012022811014884.png)
验证了我们的想法。
下一篇将会介绍django中是如何实现WSGI的。o(∩∩)o...
原文:http://www.cnblogs.com/gaott/archive/2012/02/28/2371181.html
前言
Django是一个开放源代码的Web应用框架,她像一个工具箱,包括了整个web开发中的各种技术,例如ORM,Template等。这是在阅读django的源码中作的笔记。首先需要简要介绍以下WSGI。
WSGI
基本概念
wsgi是Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。 在此接口中有两个方面,一个web应用程序类比java中的war包,一个是web服务器类比tomcat,apache。在这里我们只关注web应用程序。 参考http://www.python.org/dev/peps/pep-0333/在此接口中定义了一个服务器和应用程序通信的方法:
#file: app.py def simple_app(environ, start_response): """Simplest possible application object""" status = '200 OK' response_headers = [('Content-type', 'text/plain')] start_response(status, response_headers) return ['Hello world!\n']
服务器传递两个参数:environ,start_response到我们的应用程序中,我们根据自己的业务逻辑处理后, 调用start_response返回相应代码和响应头信息,并在方法的最后返回相应的内容。假设将此app.py部署在 服务器上,那么用户访问时,服务器将会返回 Hello world 字符串,并带着相应头信息。
实例
此处我们建立了一个应用程序也就是app,为该app创建一个view,另外值得注意的是middleware。 middleware和app是类似的东西,只不过它对于app的view实现了一个decorator的模式,看代码就明白了。import eventlet.wsgi def view_def(env, response_call): status = '200 ok' response_headers = [('Content-type', 'text/plain')] response_call(status, response_headers ) return 'hello ' class handler(object): def __init__(self, view): self._view = view def __call__(self, env, start_response): pre_middle = pre_middle(self._view) view_res = self._view(env, start_response) post_middle = post_middle(self._view) res = "%s %s %s" %(pre_middle.res,view_res,post_middle.res) return res class pre_middle(object): def __init__(self,view): print 'before app process...I run' self.res = "pre middle.." class post_middle(object): def __init__(self,view): print 'after app process...I run too' self.res = "..post middle" port = 1234 sock = eventlet.listen(('0.0.0.0', port)) handler_instance = handler(view_def) eventlet.wsgi.server(sock, handler_instance)
代码思路: 创建一个view(view_def),给view包裹Middleware(pre_middle、post_middle),然后开启一个服务器(eventlet)并监听1234端口,若有请求,那么系统的处理顺序是:
Request -> pre_middle -> view_def -> post_middle -> Response
运行结果
运行脚本:
![](http://pic002.cnblogs.com/images/2012/379362/2012022810514813.png)
在浏览器中浏览http://0.0.0.0:1234/可以看到以下效果
![](http://images.cnitblog.com/i/564326/201404/041612382345235.png)
后台输出:
![](http://pic002.cnblogs.com/images/2012/379362/2012022811014884.png)
验证了我们的想法。
下一篇将会介绍django中是如何实现WSGI的。o(∩∩)o...
相关文章推荐
- Django源码笔记——中间件处理过程
- django源码笔记-【1】
- Django源码笔记——settings加载
- 阅读{django-restframework}源码[generics.py]学习笔记
- django源码笔记-【2】
- Django Form 自定义试用笔记(附工程源码下载)
- Django框架学习笔记(30.组合搜索组件源码)
- Django源码笔记——URL解析
- django admin源码解读(笔记)
- django源码笔记-【2】(转)
- 我的BluetoothChat示例源码阅读笔记
- Android RIL源码研究笔记 の ril (二)
- 源码阅读笔记1————从Object开始
- Django 开发学习笔记(3)- 编写自定义的页面
- django使用笔记
- Django 学习笔记<一>
- Django Crusher 入门笔记(2)
- Django源码解析(二) manage.py
- Crusher Django 学习笔记4 使用Model
- 学习笔记: 源码 multinomial_logistic_loss_layer.cpp 略晓