wsgiref模块
学习django框架之前,可以先学习一下wsgiref模块,熟悉前后端交互。
一.先介绍下wsgiref模块
WSGI(Web Server Gateway Interface)是一种规范,它定义了使用python编写的web app(应用程序)与web server(socket服务端)之间接口格式,实现web app与web server间的解耦。
通俗的说:当规范建立后,程序就不再重复编写web server(socket服务端),而是直接使用现成的实现WSGI的模块(例如:wsgiref、uwsgi、werkzeug),从而让程序员更加专注与业务代码
与其重复造轮子,不如直接用现成的。
Python的wsgiref是基于WSGI规范封装的模块,我们可以在这个模块基础上开发我们的web server。
接下来我们引用wsgiref来编写一个web服务器
#_author:leo gao
#encoding:utf-8 from wsgiref.simple_server import make_server def run_server(environ, start_response):
"""
当有用户在浏览器上访问:http://127.0.0.1:8000/, 立即执行该函数并将函数的返回值返回给用户浏览器
:param environ: 请求相关内容,比如浏览器类型、版本、来源地址、url等
:param start_response: 响应相关
:return:
""" start_response('200 OK', [('Content-Type', 'text/html;charset=utf-8')]) return [bytes('hhhh', encoding="utf-8"), ] if __name__ == '__main__': httpd = make_server('localhost', 8001, run_server) # socket连接
print('----已连接至8001----')
httpd.serve_forever() # 持续监听
前端访问效果为:

接下来有个需求如果我想要通过输入不同的路径去访问不同的页面怎么实现呢?
在environ中有一个字段:"PATH_INFO",这个键对应的值就是输入的路径
#_author:leo gao
#encoding:utf-8 from wsgiref.simple_server import make_server def run_server(environ, start_response):
"""
当有用户在浏览器上访问:http://127.0.0.1:8000/, 立即执行该函数并将函数的返回值返回给用户浏览器
:param environ: 请求相关内容,比如浏览器类型、版本、来源地址、url等
:param start_response: 响应相关
:return:
""" start_response('200 OK', [('Content-Type', 'text/html;charset=utf-8')]) if environ['PATH_INFO'] == '/login':
with open('login.html', 'rb') as f:
data = f.read()
return [data] if environ['PATH_INFO'] == '/favicon.ico':
with open('favicon.ico', 'rb') as f :
data = f.read()
return [data] elif environ['PATH_INFO'] == '/index':
with open('index.html', 'rb') as f:
data = f.read()
return [data] if __name__ == '__main__': httpd = make_server('localhost', 8030, run_server) # socket连接
print('----已连接至8001----')
httpd.serve_forever() # 持续监听
前端访问效果为:

功能是实现了,但是如果需要跳转的页面很多,全放在run_server中会不会显得很累赘?这样我们把跳转各个页面的逻辑封装成各个方法。
#_author:leo gao
#encoding:utf-8 from wsgiref.simple_server import make_server def login():
with open('login.html', 'r') as f:
data = f.read()
return data def index():
with open('index.html', 'r') as f:
data = f.read()
return data def fav():
with open('favicon.ico', 'r') as f:
data = f.read()
return data def run_server(environ, start_response):
"""
当有用户在浏览器上访问:http://127.0.0.1:8000/, 立即执行该函数并将函数的返回值返回给用户浏览器
:param environ: 请求相关内容,比如浏览器类型、版本、来源地址、url等
:param start_response: 响应相关
:return:
""" url_pattern = [
("/login", login),
("/index", index),
("fav", fav)
] # 方案一
for i in url_pattern:
print(environ.get('PATH_INFO'))
if i[0] == environ.get('PATH_INFO'):
return [bytes(i[1](), encoding='utf-8'), ]
else:
return [b''] # 方案二
func = None
for item in url_pattern:
if item[0] == environ.get('PATH_INFO'):
func = item[1]
break
if func:
return [bytes(func(), encoding="utf-8"), ]
else:
return [bytes('404 not found.', encoding="utf-8"), ] if __name__ == '__main__': httpd = make_server('localhost', 8040, run_server) # socket连接
print('----已连接至8001----')
httpd.serve_forever() # 持续监听
前端访问效果为:

请尊重作者劳动成果,有需要请转载,标明出处!!!
wsgiref模块的更多相关文章
- 2、基于wsgiref模块DIY一个web框架
一 web框架 Web框架(Web framework)是一种开发框架,用来支持动态网站.网络应用和网络服务的开发.这大多数的web框架提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方 ...
- django系列1--介绍与简单原理, wsgiref模块
一.web应用框架 Web应用框架(Web application framework)是一种计算机软件框架,用来支持动态网站.网络应用程序及网络服务的开发.这种框架有助于减轻网页开发时共通性活动的工 ...
- 003---wsgi和wsgiref模块
WSGI: 全称:Web Server Gatway Interface ,web服务网关接口,独立的,与django无关,他们俩只是遵循一个约定,是一个协议. wsgiref模块: 实现了WSGI协 ...
- wsgiref模块、web框架、django框架简介
"""web框架:将前端.数据库整合到一起的基于互联网传输的python代码 web框架也可以简单的理解为是软件开发架构里面的'服务端'""" ...
- wsgiref模块,动静态网页,jinja2模块,django
基于wsgiref模块搭建服务端 from wsgiref import simple_server def run(request, response): """ :p ...
- Python--day60--web框架分类和wsgiref模块使用介绍
- Django(wsgiref、jinja2模块使用介绍)
day60 wsgiref比较稳定 """ 根据URL中不同的路径返回不同的内容--函数进阶版 返回HTML页面 让网页动态起来 wsgiref模块版 "&qu ...
- Django框架简介,wsgiref 与 jinja2 模块
目录 框架简介 wsgiref模块 jinja2 模块 框架简介 Django是一个web开发框架,用来开发web应用,本质就是, web框架+socket服务端 MVC框架和MTV框架 MVC,全名 ...
- 09 基于模块wsgiref版web框架
09 基于模块wsgiref版web框架 模块引入 真实开发中的python web程序,一般会分为两部分: 服务器程序:负责对socket服务器进行封装,并在请求到来时,对请求的各种数据 ...
随机推荐
- Tensorflow机器学习入门——cifar10数据集的读取、展示与保存
基本信息 官网:http://www.cs.toronto.edu/~kriz/cifar.html 共60000张图片:50000张用于训练.10000张用于测试 图片大小为:32X32 数据集图片 ...
- django初步了解(一)
安装django pip3 install django==版本号 创建一个djangp项目 django-admin startproject 项目名 目录介绍: 运行django项目: pytho ...
- 【算法学习记录-排序题】【PAT A1012】The Best Rank
To evaluate the performance of our first year CS majored students, we consider their grades of three ...
- 普及C组第三题(8.10)
2301. [普及组T3或T4]线索 (File IO): input:assassin.in output:assassin.out 时间限制: 1000 ms 空间限制: 262144 KB 题 ...
- bzoj3531: [Sdoi2014]旅行 (树链剖分 && 动态开点线段树)
感觉动态开点线段树空间复杂度好优秀呀 树剖裸题 把每个宗教都开一颗线段树就可以了 但是我一直TLE 然后调了一个小时 为什么呢 因为我 #define max(x, y) (x > y ? x ...
- Led Candle Light - Safe, Cost-Effective, Versatile, Realistic Flame Lighting
Candles have been used to remove light for centuries, but it took hundreds of years to make better c ...
- FreeRTOS学习笔记1:任务
任务特性每个任务有自己的环境,不依赖于其他任务与调度器任何时间点只有一个任务运行.由调度器决定上下文环境:(寄存器值.堆栈内容等)调度器保证的就是任务开始执行时的上下文环境与上一次退出时相同所以每个任 ...
- 很多win10系统用户都遇见了开机发现任务管理器中有个系统中断进程占用cpu99%的问题,
很多win10系统用户都遇见了开机发现任务管理器中有个系统中断进程占用cpu99%的问题,尝试了网上提供的方法都不能得到有效的解决.下面小编就为大家详细的介绍电脑工程师提供的正确的解决姿势. 出现系统 ...
- Demo:基于 Flink SQL 构建流式应用
Flink 1.10.0 于近期刚发布,释放了许多令人激动的新特性.尤其是 Flink SQL 模块,发展速度非常快,因此本文特意从实践的角度出发,带领大家一起探索使用 Flink SQL 如何快速构 ...
- Bugku-CTF之各种绕过
Day28 各种绕过 各种绕过哟 http://123.206.87.240:8002/web7/