廖雪峰Python教程实战Day 2 - 编写Web App骨架,运行后不显示网页如何解决
教程代码如下:
import logging; logging.basicConfig(level=logging.INFO)
import asyncio, os, json, time
from datetime import datetime
from aiohttp import web
def index(request):
return web.Response(body=b'<h1>Awesome</h1>')
@asyncio.coroutine
def init(loop):
app = web.Application(loop=loop)
app.router.add_route('GET', '/', index)
srv = yield from loop.create_server(app.make_handler(), '127.0.0.1', 9000)
logging.info('server started at http://127.0.0.1:9000...')
return srv
loop = asyncio.get_event_loop()
loop.run_until_complete(init(loop))
loop.run_forever()
正常运行完该py代码,打开浏览器输入http://127.0.0.1:9000应该显示网页。
但是我运行完一直触发浏览器下载文件的行为,而不是展示html网页,所下载的文件内容为—— <h1>Awesome</h1>
原因在于index 函数返回的是一个 web.Response 对象,其中 body 设置为包含 <h1>Awesome</h1> 的字节字符串。这种情况下,浏览器将该响应识别为下载文件而不是渲染页面。
解决方法:将返回的内容的 content-Type 设置为 text/html,以明确告诉浏览器返回的是 HTML 内容。修改 index 函数如下:
def index(request):
return web.Response(body=b'<h1>Awesome</h1>', content_type='text/html')
修改完之后运行,打开浏览器输入 http://127.0.0.1:9000 成功显示!
目前先这样设置content_type的值,后面如果出bug了再改~