python之web框架(2):了解WSGI接口
python之web框架(2):了解WSGI接口
1.什么是wsgi接口:
- wsgi:Web Service Gateway Interface。它不是模块,而只是一种规范,方便web服务器和各种框架都能契合。
 
response_body = application(env, start_response)
# response_body是返回值,返回值为web服务器响应数据的body。
# application可执行的函数(或类)
# env是一个字典,需要传入用户的请求数据。
# start_response是一个函数,需要传入2个参数。
# 参数1.status:响应体的状态,‘200 OK’ 和 ‘404 not found’这类。
# 参数2.head_list:响应体的头部,是列表,列表中再嵌元组,元组内容是key value的形式。
2.动手写个用到wsgi接口的web服务器:
#!/usr/bin/env python3
# coding:utf-8
from socket import *
from multiprocessing import Process
def app(env, start_response):
    status = '200 OK'
    head_list = [("name", "wanghui")]
    start_response(status, head_list)
    return '<h1>hello world</h1>'
class MyWebServer(object):
    def start_response(self, status, head_list):
        self.response_head = 'HTTP/1.1' + status + '\r\n'
    def deal(self, conn):
        recv_data = conn.recv(1024).decode('gb2312')
        recv_data_head = recv_data.splitlines()[0]
        print('------', recv_data_head)
        request_method, request_path, http_version = recv_data_head.split()
        request_path = request_path.split('?')[0]  # 去掉url中的?和之后的参数
        env = {'request_method':request_method, 'request_path':request_path}
        # 这里是wsgi接口调用的地方
        response_body = app(env, self.start_response)
        response_data = self.response_head + '\r\n' + response_body
        send_data = response_data.encode('utf-8')
        conn.send(send_data)
    def __init__(self):
        self.s = socket(AF_INET, SOCK_STREAM)
        self.s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
        self.s.bind(('',8000))
        self.s.listen(1023)
    def start(self):
        while 1:
            conn, user_info = self.s.accept()
            print(user_info)
            p = Process(target=self.deal, args=(conn,))
            p.start()
            conn.close()  # 进程会复制出一个新的conn,所以这里的conn需要关闭
s = MyWebServer()
s.start()
- 这个WebSever的功能实在太low,只能回应一个固定的页面,就是'hello word', 所以这样肯定是不行的。等待更新。。。
 
python之web框架(2):了解WSGI接口的更多相关文章
- python之web框架(3):WSGI之web应用完善
		
python之web框架(3):WSGI之web应用完善 1.上篇的web框架太low,只能实现回应固定页面.现在将它进行完善.首先将wsgi和web服务器进行分离,并给予它回复静态页面的能力. we ...
 - Python之Web框架们
		
Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. pip i ...
 - Python的WEB框架
		
Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. ? 1 2 ...
 - Python之Web框架Django
		
Python之Web框架: Django 一. Django Django是一个卓越的新一代Web框架 Django的处理流程 1. 下载地址 Python 下载地址:https://www.pyt ...
 - Python之Web框架
		
Python之Web框架: 一. Web框架的本质: 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env pyth ...
 - python 实现web框架simfish
		
python 实现web框架simfish 本文主要记录本人利用python实现web框架simfish的过程.源码github地址:simfish WSGI HTTP Server wsgi模块提供 ...
 - python各种web框架对比
		
0 引言 python在web开发方面有着广泛的应用.鉴于各种各样的框架,对于开发者来说如何选择将成为一个问题.为此,我特此对比较常见的几种框架从性能.使用感受以及应用情况进行一个粗略的 ...
 - Python Flask Web 框架入门
		
Python Flask 目录 本文主要借鉴 letiantian 的文章 http://www.letiantian.me/learn-flask/ 一.简介 二.安装 三.初始化Flask 四.获 ...
 - Python3.5学习十八  Python之Web框架 Django
		
Python之Web框架: 本质:Socket 引用wsgiref创建web框架 根据web框架创建过程优化所得: 分目录管理 模板单独目录 执行不同函数单独存入一个方法py文件 Web框架的两种形式 ...
 
随机推荐
- Xcode关闭警告
			
对于关闭某个警告,如果需要全局关闭的话,直接在Other C Flags里写 -Wno-...就行了,比如 -Wextra -Wno-sign-compare 就是一个常见的组合.如果相对某几个文件开 ...
 - StringBuffer类和String 类的 equals 和 ==
			
注意: equals(Object obj)equals方法的参数是任意对象 Object类的equals方法就是用==判断的,即判断两个对象是否为同一个对象 StringBuffer类没有重写equ ...
 - CF&&CC百套计划1 Codeforces Round #449 A. Nephren gives a riddle
			
http://codeforces.com/contest/896/problem/A 第i个字符串嵌套第i-1个字符串 求第n个字符串的第k个字母 dfs #include<map> # ...
 - VBscript.Encode 解码器
			
VBscript.Encode 解码器 此解码器算法来至互联网,我只是收集然后写了个简单的页面便于大家使用. 如有何不妥之处,请留言.
 - UCenter在JAVA项目中实现的单点登录应用实例
			
Comsenz(康盛)的UCenter当前在国内的单点登录领域占据绝对份额,其完整的产品线令UCenter成为了账号集成方面事实上的标准. 基于UCenter,可以将Comsenz旗下的Discuz! ...
 - iOS6下实现滑动返回
			
[转载请注明出处] 之前在看iOS7滑动返回时,发现了一个iOS6 SDK下的第三方实现,今天偶然间发现了作者在其博客上对该实现的一些心得,读来深觉之前的思考太过肤浅,许多实际的问题没有考虑到.帖子链 ...
 - python概念-各类绑定的概念和property的变态一面
			
# 编辑者:闫龙 # 1.什么是绑定到对象的方法,如何定义,如何调用,给谁用?有什么特性 #在类中定义的(self)方法都是绑定到对象的方法 #定义 class a: def b(self):#绑定到 ...
 - 解决多个python的兼容问题
			
方法1:将(安装路径和scripts)路径添加到系统环境变量,谁的顺序在前面谁就是默认的 方法2:修改python的名字,然后再终端输入比如python2或者python3
 - 2016.5.57—— Remove Duplicates from Sorted List
			
Remove Duplicates from Sorted List 本题收获: 指针: 不管什么指针在定义是就初始化:ListNode *head = NULL; 如果给head指针赋值为第一个no ...
 - 20155303 2016-2017-2 《Java程序设计》第四周学习总结
			
20155303 2016-2017-2 <Java程序设计>第四周学习总结 教材学习内容总结 第六章 继承与多态 6.1 何谓继承 继承避免多个类间重复定义共同行为,使用关键字exten ...