原作:PAWEŁ FERTYK 翻译:大江狗
原文链接:https://pfertyk.me/2017/06/getting-mars-photos-from-nasa-using-aiohttp/
小编注:aiohttp是基于asyncio实现的异步http框架。本文案例也可以使用异步django实现。
我是Andy Weir写的《火星人》一书的忠实粉丝。阅读时,我想知道马克·沃特尼(Mark Watney)绕着红色星球走的感觉如何。最近,多亏了 Twilio的这篇博文, 我发现NASA提供了一个公共API,可以提供火星漫游者拍摄的照片。但是,由于不是MMS的忠实拥护者,我决定编写自己的应用程序,以将具有启发性的图像直接传递到我的浏览器中。
创建aiohttp应用程序
让我们从一个简单的应用程序开始,只是为了启动和运行aiohttp。首先,创建一个新的virtualenv。建议使用Python 3.5以后版本,因为我们将使用asyncio提供的async def
和await
语法。如果您想进一步开发该项目并利用异步理解的优势,则可以使用Python 3.6(本例使用python版本)。接下来,安装aiohttp:
pip install aiohttp
现在创建一个python文件(称为nasa.py
),并将一些代码放入其中:
from aiohttp import web
async def get_mars_photo(request):
return web.Response(text='A photo of Mars')
app = web.Application()
app.router.add_get('/', get_mars_photo, name='mars_photo')
如果您不熟悉aiohttp,则可能需要说明以下几点:
-
get_mars_photo
协程是一个请求处理程序;它以HTTP请求作为唯一参数,并负责返回HTTP响应(或引发异常) -
app
是高级服务器;它支持路由器,中间件和信号(对于该程序,我们将仅使用路由器) -
app.router.add_get
在HTTP GET方法和'/'路径上注册请求处理程序
注意:请求处理程序不必一定是协程,它们可以是常规函数。但是我们将使用asyncio的功能,因此程序中的大多数函数都将使用进行定义async def
。
运行应用程序
要运行您的应用程序,您可以在文件末尾添加以下行:
web.run_app(app, host='127.0.0.1', port=8080)
然后像运行其他任何Python脚本一样运行它:
python nasa.py
但是有更好的方法。在许多第三方库中,您可以找到aiohttp-devtools。它提供了一个很好的runserver
命令,可以自动检测您的应用并支持实时重载:
pip install aiohttp-devtools
adev runserver -p 8080 nasa.py
现在如果您访问localhost:8080,则应该在浏览器中看到"A photo of m