如果你跟着 Aiohttp 官方文档走,按照 Polls App 配置开发环境,会发现每次修改文件必须手动关闭开启 main.py。这显然是无法接受的,那有没有像 Django、Flask 自带的那种修改后自动重载的工具呢?答案是有的。

Aiohttp-devtools

aiohttp-devtools 在 aiolibs 之下,是 aiohttp 官方支持维护的扩展。它不仅仅包含了修改文件自动重载功能,还有自动添加静态文件路径,初始化项目等功能,并且还包含了 aiohttp-debugtoolbar,装上了这个包就基本补全了缺失的开发工具,实在想不通为什么官方文档的教程不带上这个。

已有项目加入 aiohttp-devtools

首先安装 aiohttp-devtools:

pip install aiohttp-devtools

以官方示例 Polls 为例,将其中的 main 方法修改为 create_app 方法,并把 web.run_app 删除,将 app 返回即可。以下是原 main.py 中的 main 方法:

...
def main(argv):
    logging.basicConfig(level=logging.DEBUG)

    app = init_app(argv)

    config = get_config(argv)
    web.run_app(app,
                host=config['host'],
                port=config['port'])
....

修改后如下:

...
def create_app():
    logging.basicConfig(level=logging.DEBUG)

    app = init_app(argv)

    return app
...

修改完毕后将命令行 cd 到 main.py 所在的目录,直接运行 adev runserver -s static。我的项目运行后如下所示:

PS C:\works\nomox\nomox> adev runserver -s static
[17:12:36] Starting aux server at http://localhost:8001 ◆
[17:12:36] serving static files from ./static/ at http://localhost:8001/static/
[17:12:36] Starting dev server at http://localhost:8000 ●

关于项目初始化

在 Django 中执行一条命令即可创建一个初始项目文件夹,而 aiohttp-devtools 也拥有同样的功能。你需要先创建一个文件夹,然后进入创建的文件夹运行 adev start .,按照命令行提示的选项设置后即可创建一个初始项目文件夹。