Python相关模块实现WSGI规则的案例

最近学习了有关WSGI规则,分享一个简单实现的该规则的案例,也为了巩固一下所学的知识。

1. WSGI接口规则的定义

WSGI接口规则定义非常简单,它只要求开发者在开发Web应用时实现一个统一名称的函数(即application())就可以响应HTTP请求了。

application()函数就是符合WSGI规则的一个HTTP处理函数,它接收两个参数:

evironment这是一个包含所有HTTP请求信息的dict对象,语法格式为{key1:value1,key2:value2,...}
response这是一个开始响应HTTP请求的函数(响应头、响应行)。

需要注意的是,application()函数的返回值会影响body体内容。

整个application()函数本身没有涉及到任何解析HTTP的内容,即把底层Web服务器解析部分和应用程序逻辑部分进行了分离,这样开发者就可以专心处理body体内容的部分。

def application(environ,start_response):
    start_response(status,response_headers)
    return [response_body]

2. 遵循wsgi写一个python框架

        2.1 wsgiref模块创建服务

        wsgiref是Python标准库的一个模块,是对WSGI的一个实现。其中wsgiref.simple_server是一个简单的WSGI HTTP Server。

from wsgiref import simple_server

def hello_app():
    # 此函数中返回数据给客户端
    pass

# make_server()创建服务
server = simple_server.make_server('localhost', 9000, hello_app)
print('running...')
# serve_forever()开启服务
server.serve_forever()

        2.2 处理web请求和响应

        使用webob模块封装的Request和Response来处理请求和响应

Request封装environ,Response返回响应体

from wsgiref import simple_server
from webob import Request,Response

def hello_app(environ,start_reponse):
    # environ-->客户端访问服务器发送的请求信息
    # 将请求信息按行进行处理
    req=Request(environ)
    # body='hello world'-->就是服务器发送给客户端的信息
    response=Response(body='hello world')
    # 输出,根据wsgi协议,返回的需要是一个迭代器,返回一个list就可以
    return response(environ,start_reponse)

#创建服务
server=simple_server.make_server('',8004,hello_app)
#启动服务
server.serve_forever()

        2.3 路由分发

        使用selector模块进行路由分发

可以到GitHub - lukearno/selector: WSGI request delegation. (AKA routing.)查看更多selector模块的相关操作

from wsgiref import simple_server
from webob import Request,Response
from selector import Selector

# '/'
def hello_app(environ,start_reponse):
    # 将请求信息按行进行处理
    req = Request(environ)
    response = Response(body='hello world')
    return response(environ,start_reponse)

# '/cart'
def cart_app(environ,start_reponse):
    response = Response(body='cart page')
    return response(environ, start_reponse)

# 自定义 404 页面
def page404(environ,start_reponse):
    response = Response(body='404 not found')
    return response(environ, start_reponse)

# 路由分发 - selector
app = Selector()
# 实现GET请求
app.add('/cart',GET=cart_app)
app.add('/',GET=hello_app)
# 如果他请求了一个非法的路径-404
app.status404 = page404

# 创建服务
server = simple_server.make_server('',8004,app)
print("web server is listening at 8004......")
# 启动服务
server.serve_forever()

到这里就实现了使用wegiref、webob、selector模块实现一个遵循WSGI规则的简单框架。

后续会出关于selector模块实现路由传参、获取访问的参数、静态资源加载以及实现POST请求的文章

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WSGI(Web Server Gateway Interface)是Python Web应用程序和Web服务器之间的标准接口。它定义了Web服务器如何与Python应用程序通信,以及Python应用程序如何处理Web请求和响应。以下是WSGIPython中的实现: 1. WSGI接口定义格式 WSGI接口定义了两个函数:一个是应用程序函数,另一个是服务器函数。应用程序函数接收两个参数:一个是包含请求信息的字典,另一个是一个回调函数,用于发送响应。服务器函数接收两个参数:一个是应用程序函数,另一个是服务器环境信息。 2. WSGI的作用 WSGI的作用是将Web服务器和Python应用程序解耦,使得它们可以独立开发和部署。Web服务器只需要实现WSGI接口,Python应用程序只需要实现WSGI应用程序函数,它们之间的通信就可以通过WSGI接口完成。 3. 使用WSGI实现一个mini_frame(web框架) 下面是一个使用WSGI实现的mini_frame(web框架)的示例代码: ```python # mini_frame.py def index(): return "Hello World!" def login(): return "Login Page" def application(env, start_response): start_response('200 OK', [('Content-Type', 'text/html')]) if env['PATH_INFO'] == '/index': return [index().encode()] elif env['PATH_INFO'] == '/login': return [login().encode()] else: return [b'404 Not Found'] ``` 上述代码中,我们定义了两个函数index和login,分别用于处理/index和/login请求。然后我们定义了一个WSGI应用程序函数application,它接收两个参数:一个是包含请求信息的字典env,另一个是一个回调函数start_response,用于发送响应。在应用程序函数中,我们根据请求路径调用相应的处理函数,并返回响应内容。 4. WSGI实现方式 WSGI实现方式有很多种,其中比较常用的有以下几种: - 使用Python标准库中的wsgiref模块实现WSGI服务器。 - 使用第三方库,如Gunicorn、uWSGI实现WSGI服务器。 - 使用Web框架自带的WSGI服务器,如Flask、Django等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值