1.Flask:从wsgi开始

Flask(从wsgi开始 一)

运行Flask=开启一个服务

web应用处理请求的具体流程

  1. 用户操作操作浏览器发送请求;
  2. 请求转发至对应的web服务器
  3. web服务器将请求转交给web应用程序,web应用程序处理请求
  4. web应用将请求结果返回给web服务器,由web服务器返回用户响应结果
  5. 浏览器收到响应,向用户展示

    一个wsgi服务

全称Python Web Server Gateway Interface,指定了web服务器和Python web应用或web框架之间的标准接口,以提高web应用在一系列web服务器间的移植性。 具体可查看 官方文档:https://www.python.org/dev/peps/pep-0333/

  1. WSGI是一套接口标准协议/规范;
  2. 通信(作用)区间是Web服务器和Python Web应用程序之间;
  3. 目的是制定标准,以保证不同Web服务器可以和不同的Python程序之间相互通信
1
2
3
4
5
6
7
8
9
10
11
12
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轮询时间
  1. env:字典,包含请求的所有信息
  2. start_response:在可调用对象中调用的函数,用来发起响应,参数包括状态码,headers等

访问

拓展1(面向过程)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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(字典路由)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# -*- 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轮询时间

使用装饰器拓展

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# -*- 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》

 wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
您的支持将鼓励我继续创作!