Django和WSGI
2015-11-11 23:11
417 查看
开始学习Django这个Web框架,在一个在线课堂上看到一个对Django和WSGI的介绍非常清楚,忍不住摘抄到这里
Django和WSGI
根据Python的惯例,Django不是一个完整的Web后端框架,它只负责开发WSGI应用程序 ,在生产环境中Django应用应当与一个WSGI服务器配套,由WSGI服务器负责网络通讯部分。WSGI,全称 Web Server Gateway Interface,或者 Python Web Server Gateway Interface ,是为 Python 语言定义的Web服务器和Web应用程序之间的一种简单而通用的接口。WSGI将Web服务分为了服务器和应用程序。WSGI服务器只负责两件与浏览器相关的工作:接收浏览器发来的HTTP请求,向浏览器发送HTTP应答;而对HTTP请求的具体处理逻辑,则由调用WSGI应用程序来完成。实现一个WSGI应用,只需要满足3个要求:是可调用的,比如是一个函数,或者是一个可调用类(具有__call__方法)的实例WSGI应用应当返回一个可迭代(iterable)的值,比如字符串列表WSGI应用在返回之前,应当调用WSGI服务器传入的start_response函数发送状态码和HTTP报文头最小的WSGI应用
一种最简单的满足WSGI规约的应用程序需要实现一个指定形式的函数:from wsgiref.simple_server import make_server def wsgi_app(environ,start_response): start_response('200 OK',[('Context-Type','text/plain')]) return 'such a tiny wsgi app!' httpd = make_server('0.0.0.0',80,wsgi_app) httpd.serve_forever()environ是一个包含全部HTTP请求信息的字典/Dict,由WSGI服务器解包HTTP请求生成。
创建WSGI应用程序
Django框架是对一个WSGI应用的结构进行了分解,有些部件由框架完成,有些部分则由开发者来实现。因此开发一个基于Django框架的Web应用,事实上就是基于Django框架所约定的需要由开发者完成的部件。根据Django约定,一个WSGI应用里最核心的两个部件:路由表和视图。Django框架的核心功能就是路由:根据HTTP请求的URL,查找路由表,将HTTP请求分发到相对应的视图去处理:需要指出的是,在Django框架中应用(Application)有特定的含义,后续我们将使用Django项目来表示Django框架的WSGI应用对象。创建WSGI应用对象很简单,使用get_wsgi_application()函数来完成。这个对象用来跟WSGI服务器来对接:from django.core.wsgi import get_wsgi_applicationwsgi_app = get_wsgi_application()全局配置对象不过有一点需要指出,Django框架严重依赖于一个全局配置对象settings来定制其行为,因此,我们需要在创建WSGI应用对象之前,首先使用默认值初始化这个全局配置对象:
from django.conf import settingssettings.configure()在示例代码中你看到,我们设置了其DEBUG 属性为True,这将使Django框架运行在调试状态,输出调试信息。以下为示例代码:
from django.conf import settingsfrom django.core.wsgi import get_wsgi_applicationsettings.configure()settings.DEBUG = Truewsgi_app = get_wsgi_application()print wsgi_app
相关文章推荐
- Django路由算法
- 更改hosts后还是无法使用Google,Facebook,Twitter等服务怎么办?
- 《An Industrial-Strength Audio Search Algorithm》译文
- 《An Industrial-Strength Audio Search Algorithm》译文
- Go语言并发之美
- STL::算法::常见算法
- mongo分片
- Introduction to Algorithm - Summary of Chapter 2(0) - Getting started
- google git resource
- 主库磁盘满,从库io线程报错Got fatal error 1236 from master when reading data from binary log
- Git Tutorial 1 - Goto Staging Area
- 创建django项目报错:Django not found
- [转]How Hash Algorithms Work
- about golang
- google浙大招聘笔试题
- category extension
- High Performance Django
- go安装windows源码
- webrtc doubango linphone
- 一幅图看看mongondb对企业级数据的管理