Response 使用及 Wsgify 装饰器| 学习笔记

简介: 快速学习 Response 使用及 Wsgify 装饰器

开发者学堂课程【Python Web 开发基础Response 使用及 Wsgify 装饰器】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/554/detail/7639


Response 使用及 Wsgify 装饰器


Environ 的解析— — webob 库

环境数据有很多,都是存在字典中的,字典的存取方式没有对象的属性访问方便。使用第三方库 webob ,可以把环境数据的解析、封装成对象。

(1)Webob.Request 对象

将环境参数解析并封装成 request 对象

GET 方法,发送的数据是 URL 中 Query string,在 Request Header 中。 request.GET 就是一个字典 MultiDict,里面就封装着查询字符串。

POST 方法,"提交"的数据是放在 Request Body 里面,但是也可以同时使用 Query String。Request.POST 可以获取 Request Body 中的数据,也是个字典 MultiDict。

(2)MultiDict

MultiDict 允许一个 key 存了好几个值。

from webob.multidict import MultiDict

md=MultiDict()

md.add(1,'magedu')  

md.add(1,'.com')

md.add('a',1)  

md.add('a',2)

md.add('b', '3')  

md['b'] = '4'

for pair in md.items():

print(pair)

print(md.getall(1))

#print(md.getone('a'))#只能有一个值  

print(md.get('a'))#返回一个值

print(md.get('c'))#不会抛异常KeyError,返回None

(3)Webob.Response 对象

res = webob.Response()  

print(res.status)  

print(res.headerlist)

start_response(res.status,res.headerlist)

#返回可迭代对象

html='

马哥教育欢迎你

'.encode("utf-8")  

return [html]

如果一个 Application 是一个类的实例,可以实现 _call_ 方法。

我们来看看 webob.Response 类的源代码

def _call_ (self,environ, start_response):  

“ “ ”

WSGI application interface

“ “ ”

if self.conditional_response:

return self.conditional_response_app(environ,start_ response)

headerlist=self. _abs_headerlist(environ)

Start_response(self.status,headerlist)  

if environ ['REQUEST_METHOD'] =='HEAD':

# Special case here...

return EmptyResponse(self. _app_iter)  

return self. _app_iter

由此可以得到下面代码

def application(environ:dict,start_response):

#请求处理

request=webob.Request(environ)  

print(request.method)  

print(request.path)

print(request.query_string)  

print(request.GET)  

print(request.P0ST)

print('params ={}'.format(request.params))

#响应处理

res=webob.Response()#[('Content-Type','text/html;charset=UTF-8'),('Content-Length','0')]

res.status_code=200#默认200  

print(res.content_type)

html='

马哥教育欢迎你

'.encode("utf-8") res.body=html

return res(environ, start_response)

(4)Webob.dec 装饰器

Wsgify 装饰器

class webob.dec.wsgify(func=None,RequestClass=None,args=(), kwargs=None,middleware_wraps=None)  

from webob.dec import wsgify

@wsgify

def app(request:webob.Request)->webob.Response:

res=webob.Response('

马哥教育欢迎你.magedu.com

')

return res

Wsgify 装饰器装饰的函数应该具有一个参数,这个参数是 webob.Request 类型,是对字典 environ 的对象化后的实例。

返回值

可以是一个 webob.Response 类型实例

可以是一个 bytes 类型实例,它会被封装成 webob.Response 类型实例的 body 属性

可以是一个字符串类型实例,它会被转换成 bytes 类型实例,然后会被封装成 webob.Response 类型实例的 body 属性

总之,返回值会被封装成 webob.Response 类型实例返回

将上面的 app 函数封装成类

from webob import Response, Request  

from webob.dec import wsgify

from wsgiref.simple_server import make_server

class App:

@wsgify

def_call_(self,request:Request):

return '

马哥教育欢迎你.magedu.com

'

if _name_=='_main_ ':

ip='127.0.0.1'  

port =9999

server =make_server(ip,port, app)

try:

server.serve_forever()# server.handle_request()一次  

except KeyboardInterrupt:

server.shutdown()

server.server_close()

上面代码中,所有的请求,都有这个 App 类的实例处理,需要对它进行改造。

相关文章
|
4天前
|
云安全 人工智能 自然语言处理
|
8天前
|
人工智能 Java API
Java 正式进入 Agentic AI 时代:Spring AI Alibaba 1.1 发布背后的技术演进
Spring AI Alibaba 1.1 正式发布,提供极简方式构建企业级AI智能体。基于ReactAgent核心,支持多智能体协作、上下文工程与生产级管控,助力开发者快速打造可靠、可扩展的智能应用。
798 17
|
11天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
802 59
Meta SAM3开源:让图像分割,听懂你的话
|
2天前
|
人工智能 安全 小程序
阿里云无影云电脑是什么?最新收费价格个人版、企业版和商业版无影云电脑收费价格
阿里云无影云电脑是运行在云端的虚拟电脑,分企业版和个人版。企业版适用于办公、设计等场景,4核8G配置低至199元/年;个人版适合游戏、娱乐,黄金款14元/月起。支持多端接入,灵活按需使用。
235 164
|
9天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
334 116
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
358 3
|
6天前
|
弹性计算 搜索推荐 应用服务中间件
阿里云服务器租用价格:一年、1小时及一个月收费标准及优惠活动参考
阿里云服务器优惠汇总:轻量应用服务器200M带宽38元/年起,ECS云服务器2核2G 99元/年、2核4G 199元/年,4核16G 89元/月,8核32G 160元/月,香港轻量服务器25元/月起,支持按小时计费,新老用户同享,续费同价,限时秒杀低至1折。
406 166

热门文章

最新文章