第一部分
安装
pip install pecan
实现Hello World
我们先All in One把代码放到一个文件里。
新建一个app.py文件,代码如下:
# /usr/bin/env python
# coding=utf-8
from wsgiref import simple_server
import pecan
class RootController(object):
@pecan.expose()
def index(self):
return "Hello World"
app = pecan.Pecan(RootController())
if __name__ == "__main__":
sev = simple_server.make_server("127.0.0.1", 5000, app)
sev.serve_forever()
运行起来,浏览器里输入http://127.0.0.1:5000 查看效果
完美这就实现了!!!
解释一下代码
class RootController(object):
@pecan.expose()
def index(self):
return "Hello World"
这定义了一个控制RootController,定义一个Pecan的app需要一个RootController。
这里的index方法名是不能改的,routing的时候会,查找有没有这个方法,而且必须使用装饰器 @pecan.expose()
注意!!!
有些小朋友,会把@pecan.expose**()**写成@pecan.expose,没有带括号。一运行起,界面上就该报:“A server error occurred. Please contact the administrator.”,控制台会打出“AttributeError: ‘instancemethod’ object has no attribute ‘_pecan’”。这就是没用到装饰器,一些属性没有加上。装饰器使用时带不带括号是有区别的。当然也可以写一个兼容的。我们会在最后放一个兼容的,防止一些粗心的小朋友,因为这苦恼。
app = pecan.Pecan(RootController())
这段就是生成一个Pecan的WSGI对象。第一个参数需要传递一个RootController对象,记住是一个object不是类。有的小朋友会写成app = pecan.Pecan(RootController),这样控制台又该报错了“TypeError: unbound method index() must be called with RootController instance as first argument (got nothing instead)
”
if __name__ == "__main__":
sev = simple_server.make_server("127.0.0.1", 5000, app)
sev.serve_forever()
这个使用python自带的模块wsgiref启动一个WSGI app,这个测试用,生产环境不要用。
一个带不带括号都行的expose
# /usr/bin/env python
# coding=utf-8
import pecan
from functools import wraps
def happy_expose(f=None, **kw):
if f is None:
def inner_expose(func):
return happy_expose(func, **kw)
return inner_expose
else:
@wraps(f)
@pecan.expose(**kw)
def _expose(*args, **kwargs):
return f(*args, **kwargs)
return _expose