1. Web应用

web应用的最原始的访问流程:

  • 客户端发送HTTP请求;
  • 服务端接收到请求,生成一个HTML文档;
  • 服务端将构造HTTP响应,包含:响应头(响应码、键值对)、响应体(HTML文档)
  • 客户端接收HTTP响应,并呈现内容

2. WSGI

脱离底层HTTP协议层内容,只关注如何生成HTML文档部分,并定义了一个标准:Web Server Gateway Interface。重点要求实现一个能够接收两个参数的可调用对象(单独的函数,或者类中的__call__函数)

2.1. 类实现

class WSGIHandler(object):
def __init__():
pass def __call__(self, environ, start_response):
request = environ
start_response('200 OK', [('Content-Type', 'text/html'), ])
return 'Hello World' app = WSGIHandler()

2.2. 函数实现

def app(environ, start_response):
request = environ
start_response('200 OK', [('Content-Type', 'text/html'),])
return 'Hello World'

3. Http与WSGI

程序都存在输入、输出,WSGI定义了输出为:响应头和响应体,并且定义了输入:environ和start_response,如果使用的是HTTP、NGINX等web服务器,则需要安装对应的WSGI模块,该模块能够处理WSGI标准所要求的输入输出。Python自身也提供了纯Python实现的wsgi功能模块:wsgiref,这个模块会处理输入问题,并将app返回的值最终通过HTTP发送给客户端。示例:

from wsgiref.simple_server import make_server

def application(environ, start_response):
request = environ
start_response('200 OK', [('Content-Type', 'text/html'),])
return 'Hello, world' print("Start server: 0.0.0.0:8080")
httpd = make_server('0.0.0.0', 8080, app)
httpd.serve_forever()

4. Django与WSGI

web框架的核心是无法脱离WSGI的逻辑部分的,django框架的入口程序:django/core/handlers/wsgi.py#WSGIHandler.__call__函数,函数代码(版本v1.11.6):

class WSGIHandler(base.BaseHandler):
request_class = WSGIRequest def __init__(self, *args, **kwargs):
super(WSGIHandler, self).__init__(*args, **kwargs)
self.load_middleware() def __call__(self, environ, start_response):
set_script_prefix(get_script_name(environ))
signals.request_started.send(sender=self.__class__, environ=environ)
request = self.request_class(environ)
response = self.get_response(request)
response._handler_class = self.__class__

status = '%d %s' % (response.status_code, response.reason_phrase)
response_headers = [(str(k), str(v)) for k, v in response.items()]
for c in response.cookies.values():
response_headers.append(str('Set-Cookie'), str(c.output(header='')))
start_response(force_str(status), response_headers)
if getattr(response, 'file_to_stream', None) is not None and \
environ.get('wsgi.file_wrapper'):
response = environ['wsgi.file_wrapper'](response.file_to_stream)
return response

[TimLinux] Python Django与WSGI的简介的更多相关文章

  1. python django基础四 ORM简介

    ORM,全称是object relation mapping.翻译过来,就是对象关系映射. 主要来学习MySQL操作,MySQL是一个软件.它的优点:1.免费 2.开源 pymysql,就是Mysql ...

  2. [TimLinux] Python Django myblog启动

    1. myblog介绍 自己给自己定的一个学习项目,用于: 使用学到的Python Web开发技术,框架django 使用学到的CSS技术,实现前端功能 使用学到的Axure工具,画出前端页面功能草图 ...

  3. Python Web开发中的WSGI协议简介

    在Python Web开发中,我们一般使用Flask.Django等web框架来开发应用程序,生产环境中将应用部署到Apache.Nginx等web服务器时,还需要uWSGI或者Gunicorn.一个 ...

  4. Django框架-目录文件简介

    Rhel6.5 Django1.10 Python3.5 Django框架-目录文件简介 1.介绍Django Django:一个可以使Web开发工作愉快并且高效的Web开发框架. 使用Django, ...

  5. python Django教程 之 安装、基本命令、视图与网站

    python  Django教程  之 安装.基本命令.视图与网站 一.简介 Django 中提供了开发网站经常用到的模块,常见的代码都为你写好了,通过减少重复的代码,Django 使你能够专注于 w ...

  6. [python] python django web 开发 —— 15分钟送到会用(只能送你到这了)

    1.安装python环境 1.1 安装python包管理器: wget https://bootstrap.pypa.io/get-pip.py sudo python get-pip.py   1. ...

  7. python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器

    python3.5 manage.py runserver python Django教程 之模板渲染.循环.条件判断.常用的标签.过滤器 一.Django模板渲染模板 1. 创建一个 zqxt_tm ...

  8. CentOS+Apache+mod_wsgi+Python+Django

    前言 网上有关的教程千篇一律,都是无脑抄,自己都不验证一遍就直接复制,毫无意义,我通过官方文档和自己摸索,总结了一套教程. Django自带Web服务功能,但那只是方便开发调试,生产环境中一般将Dja ...

  9. python Django 学习笔记(一)—— Django安装

    注:本人python版本2.7.5 ,win7系统 安装Django https://www.djangoproject.com/download/ 官方下载Django-1.5.5.tar.gz 1 ...

随机推荐

  1. 网站搭建 - IIS 填坑 - 终于建好站了 linux + Windows

    之前的IIS可以运行Windows的网页,但是对于php的网页,还是不能够支持,于是决定重新来一遍. (把踩的坑重新描述一下,在下载完php之后,解压后不要急着改文件,跳到最后的页面去改.) 以便能够 ...

  2. Thinkphp5与QueryList,也可以实现采集(爬虫)页面功能

    QueryList 是什么 QueryList是一套用于内容采集的PHP工具,它使用更加现代化的开发思想,语法简洁.优雅,可扩展性强.相比传统的使用晦涩的正则表达式来做采集,QueryList使用了更 ...

  3. 使用Topshelf组件 一步一步创建 Windows 服务

    我们先来介绍一下使用它的好处,以下论述参考自其他大神. topshelf是创建windows服务的一种方式,相比原生实现ServiceBase.Install.Installer更为简单方便, 我们只 ...

  4. Python 常用模块系列学习(3)--configparser module

    configpaser 模块----用于生成和修改常见配置文档 1. config 对象的创建: import configparser #导入模块 config = configparser.Con ...

  5. nyoj 8-一种排序 (贪心)

    8-一种排序 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:9 submit:18 题目描述: 现在有很多长方形,每一个长方形都有一个编号,这个编号 ...

  6. nyoj 39-水仙花数

    39-水仙花数 内存限制:64MB 时间限制:1000ms Special Judge: No accepted:35 submit:70 题目描述: 请判断一个数是不是水仙花数. 其中水仙花数定义各 ...

  7. nyoj 655-光棍的yy (python, 未A)

    655-光棍的yy 内存限制:64MB 时间限制:1000ms 特判: No 通过数:4 提交数:7 难度:2 题目描述: yy经常遇见一个奇怪的事情,每当他看时间的时候总会看见11:11,这个很纠结 ...

  8. 磁盘配额管理disk quotas

    条件: a.确保系统内核支持,Linux一般都支持 b.确保分区格式支持,ext2都只持! c.安装有quota软件,centos默认都有! (1)检查内核是否打开磁盘配额支持 [root@cento ...

  9. C# XML解析之DOM模型

    DOM的工作方式是:首先将XML文档一次性的装入内存,然后根据文档中定义的元素和属性在内存中创建一个“树型结构”也就是一个文档对象模型,这里的含义其实是把文档对象化,文档中每个节点对应着模型中一个对象 ...

  10. 官宣!Amazon EMR正式支持Apache Hudi

    ​Apache Hudi是一个开源的数据管理框架,其通过提供记录级别的insert, update, upsert和delete能力来简化增量数据处理和数据管道开发.Upsert指的是将记录插入到现有 ...