廖雪峰python教程之搭载web-app骨架day2

在这里先给出廖雪峰老师给出的源码app.py,并且我按照自己的理解进行了相关的标注:

import logging; logging.basicConfig(level=logging.INFO)

import asyncio, os, json, time
from datetime import datetime

from aiohttp import web
#部署一个web服务器首先要创建一个请求处理器,请求处理器可以是普通方法,也可以是一个协程方法,
# 它只有一个用于接受Request实例对象的参数,之后返回Response实例对象
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()#从asyncio模块中直接获取一个EventLoop的引用,然后把需要执行的协程扔到EventLoop中执行
loop.run_until_complete(init(loop))#把 init协程放到loop中执行
loop.run_forever()

但是在运行过程中出现了几个问题:
错误提示

然后我就到浏览器中查看网址是否可以正常显示,结果如图所示:
显示结果
说明页面还是有问题,在网上看了很多同学的讨论才知道需要在请求处理器返回的Resonse实例传入参数content_type=‘text/html’,否则会出现下载页面。
加上后效果如图所示:显示结果
可以看到,页面可以正常显示!

但是,虽然页面现在可以正常显示,控制台上的提示还有
提示
仔细看提示:发现是
1.“@coroutine"的写法在python3.8之后已经被弃用,
2.loop 这样的写法也被弃用
3. Application.make_handler(…) 也被弃用。。。

所以,又将廖老师的写法进行了修改,如下图所示:

import logging
from aiohttp import web
import asyncio
logging.basicConfig(level=logging.INFO)  #配置logging的基本信息,level=logging.INFO,记录INFO及以上的日志
#部署一个web服务器首先要创建一个请求处理器,请求处理器可以是普通方法,也可以是一个协程方法,
# 它只有一个用于接受Request实例对象的参数,之后返回Response实例对象
def index(request):
    # return web.Response(body=b'<h1>Awesome<h1>')
     return web.Response(body=b'<h1>Awesome<h1>',content_type='text/html')
    

#@asyncio.coroutine
async def init(event_loop):
    app = web.Application(loop=event_loop)
    app.router.add_route('GET', '/', index)
    apprunner = web.AppRunner(app) # 构造AppRunner对象
    await apprunner.setup() # 调用setup()方法,注意因为源码中这个方法被async修饰,所以前面要加上await,否则报错
    srv =  await event_loop.create_server(apprunner.server, '127.0.0.1', 9001)# 将apprunner的server属性传递进去
    logging.info('server started at http://127.0.0.1:9001...')
    return srv
 

loop = asyncio.get_event_loop()
loop.run_until_complete(init(loop))
loop.run_forever()

哈斯
还是有loop被弃用这个提示,虽然不影响,但是还是想把它给去掉。在这里留下这个小疑问。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值