前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flask(从wsgi开始 一)

Flask(从wsgi开始 一)

作者头像
zx钟
发布2020-06-19 11:02:37
4300
发布2020-06-19 11:02:37
举报
文章被收录于专栏:测试游记

运行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程序之间相互通信
代码语言:javascript
复制
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(面向过程)

代码语言:javascript
复制
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(字典路由)

代码语言:javascript
复制
# -*- 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轮询时间

使用装饰器拓展

代码语言:javascript
复制
# -*- 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》

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试游记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • web应用处理请求的具体流程
  • 一个`wsgi`服务
  • 拓展1(面向过程)
  • 拓展2(字典路由)
  • 使用装饰器拓展
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档