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程序之间相互通信

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(面向过程)

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》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值