運行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等
拓展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 : [email protected]
"""
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 : [email protected]
"""
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》