Webob中针对WSGI接口设计了@wsgi装饰器,简化程序的书写,作用就是将一个函数转换成一个WSGI应用。
wsgify
class webob.dec.wsgify(func=None, RequestClass=None, args=(), kwargs=None, middleware_wraps=None)<span style="font-family: SimSun; background-color: rgb(255, 255, 255);"> </span>
将一个request实例对象作为输入,response作为输出的函数wrap包装成一个WSGI应用。
用法如下:
(1)、
@wsgify
def myfunc(req):
return webob.Response('hey there')
经过装饰后,函数myfunc作为一个WSGI应用,有两种调用方式:
app_iter = myfunc(environ, start_response)
resp = myfunc(req)
如果处理中触发了webob.exc异常,异常信息会传入Response中。
(2)、
装饰器还可以自定义,一般通过一个subrequest来实现,如下:
class MyRequest(webob.Request): #python中的继承,子类继承Request类
@property #只读
def is_local(self):
return self.remote_addr == '127.0.0.1'
@wsgify(RequestClass=MyRequest)
def myfunc(req):
if req.is_local:
return Response('hi!')
else:
raise webob.exc.HTTPForbidden
可以看到,经过这种方式,我们在整个WSGI中增加了request中一些自定义内容的处理。
可能不是很完整,但是够用就可以了。等后面用到其他的,再来补充。