pecan.expose
可以标记controller方法,使得该方法可以通过http访问。
pecan.expose
定义如下:
pecan.expose(template=None, generic=False, route=None, **kw)
示例:
hello
方法会返回Hello World
作为HTML响应体
from pecan import expose
class RootController(object):
@expose()
def hello(self):
return 'Hello World'
expose()
可以在同一个方法使用多次。
from pecan import expose
class RootController(object):
@expose('json')
@expose('text_template.mako', content_type='text/plain')
@expose('html_template.mako')
def hello(self):
return {'msg': 'Hello!'}
<!-- html_template.mako -->
<html>
<body>${msg}</body>
</html>
@expose(‘json’)会用JSON序列化返回值,而请求路径为/hello.json
@expose(‘text_template.mako’, content_type=‘text/plain’)会使用text_template.mako
进行渲染,请求路径为/hello.txt
@expose(‘html_template.mako’)请求路径为/hello.html
,默认content-type
为text/html
如果你想要使用包含-
的路径,例如/some-path
,但是在Python中,方法名不能包含-
。此时可以指定expose
的route
值。
示例:
此时只能通过/some-path
路径成功访问。而/some_path
将返回404
class RootController(object):
@pecan.expose(route='some-path')
def some_path(self):
return dict()
generic
为true时,可以根据请求方法将相同的路径路由到相应的方法。
如下,index
处理http GET /
,index_POST
处理http POST /
expose
会生成f.when
装饰器。
from pecan import expose
class RootController(object):
# HTTP GET /
@expose(generic=True, template='json')
def index(self):
return dict()
# HTTP POST /
@index.when(method='POST', template='json')
def index_POST(self, **kw):
uuid = create_something()
return dict(uuid=uuid)