稍微改了改 coroweb.py 和 app.py,并添加了注释,Day 7 测试没问题
Topic source用你的方法Day 10的时候访问http://127.0.0.1:9000的时候浏览器页面显示500 Internal Server Error Server got itself in trouble;
控制台显示:
File "/Users/fisher/Desktop/awesome-python3-webapp-day/www/templates/blogs.html", line 18, in template
<p class="uk-article-meta">发表于{{ blog.created_at|datetime }}</p>
jinja2.exceptions.TemplateAssertionError: No filter named 'datetime'.
用廖大神的代码就没问题,目的:用web.run_app()
代替loop.create_server()
和loop.run_until_complete()
,
还请教一下大神的解决方案
- 1
xian_wen
【coroweb.py 修改】:
fn = asyncio.coroutine(fn)
将普通函数转化为协程,这个不加目前运行也没啥问题。官网Router.add_route()
中提到Pay attention please: handler is converted to coroutine internally when it is a regular function,貌似会自动进行转化。【app.py 修改】:
loop
Deprecated since version 3.5,故将所有用到loop
的地方都给删了,包括 orm.py。web.run_app()
代替loop.create_server()
和loop.run_until_complete()
,随着而来的问题是数据库连接池的创建必须放到协程中运行。解决办法:单独定义一个协程init_db()
,然后绑定到app.on_startup
,使得 app 启动后,数据库连接池随之创建。