运行Flask=开启一个服务
web应用处理请求的具体流程
用户操作操作浏览器发送请求;
请求转发至对应的web服务器
web服务器将请求转交给web应用程序,web应用程序处理请求
web应用将请求结果返回给web服务器,由web服务器返回用户响应结果
浏览器收到响应,向用户展示
一个`wsgi`服务
全称Python Web Server Gateway Interface,指定了web服务器和Python web应用或web框架之间的标准接口,以提高web应用在一系列web服务器间的移植性。具体可查看 官方文档:https://www.python.org/dev/peps/pep-0333/
WSGI是一套接口标准协议/规范;
通信(作用)区间是Web服务器和Python Web应用程序之间;
目的是制定标准,以保证不同Web服务器可以和不同的Python程序之间相互通信
from wsgiref.simple_server import make_server
def app(env, start_response):
# env 获取请求相关数据
# start_response
start_response('200 OK',[('content-type','text/plain'),])
return [b"hello"]
server = make_server("", 6001, app)
server.serve_forever() # poll_interval轮询时间
env:字典,包含请求的所有信息
start_response:在可调用对象中调用的函数,用来发起响应,参数包括状态码,headers等
![访问](https://i-blog.csdnimg.cn/blog_migrate/f455e405cc0c82266427e3530d47a412.png)
拓展1(面向过程)
from wsgiref.simple_server import make_server
def app(env, start_response):
# env 获取请求相关数据
# start_response
url = env['PATH_INFO']
if url == '/hi':
start_response('200 OK', [('content-type', 'text/plain'), ])
return [b"hello"]
elif url == '/':
start_response('200 OK', [('content-type', 'text/plain'), ])
return [b"welcom"]
else:
start_response('404 not fount', [('content-type', 'text/plain'), ])
return [b"not fount"]
server = make_server("", 6001, app)
server.serve_forever() # poll_interval轮询时间
这样可以访问
/hi
/
其他路由返回not found
拓展2(字典路由)
# -*- encoding: utf-8 -*-
"""
@File : day0_1.py
@Time : 2020/6/13 9:40 上午
@Author : zhongxin
@Email : 490336534@qq.com
"""
from wsgiref.simple_server import make_server
def home():
return 'welcome'
def hi():
return 'hi'
router = {
"/": home,
'hi': hi
}
def app(env, start_response):
url = env.get("PATH_INFO")
resp = router.get(url)
if url is None or resp is None:
start_response('404 not fount', [('content-type', 'text/plain'), ])
return [b"not fount"]
else:
start_response('200 OK', [('content-type', 'text/plain'), ])
return [resp().encode()]
server = make_server("", 6001, app)
server.serve_forever() # poll_interval轮询时间
使用装饰器拓展
# -*- encoding: utf-8 -*-
"""
@File : day0_1.py
@Time : 2020/6/13 9:40 上午
@Author : zhongxin
@Email : 490336534@qq.com
"""
from wsgiref.simple_server import make_server
class Route:
def __init__(self):
self.url = {}
def route(self, path):
def decorator(func):
self.url[path] = func
func()
return decorator
def __call__(self, env, start_response):
path = env["PATH_INFO"]
if path in self.url:
status = '200 OK'
response_header = [('content-type', 'text/html')]
start_response(status, response_header)
return self.url[path]()
else:
status = '404 Not Found'
response_header = [('content-type', 'text/html')]
start_response(status, response_header)
return [b"404 not found"]
app = Route()
@app.route('/')
def index():
yield b'welcome'
@app.route('/hi')
def hi():
yield b'hello'
server = make_server("", 6001, app)
server.serve_forever() # poll_interval轮询时间
一本函数式编程
的书:《The Little Schemer》