如果你跟着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 .,按照命令行提示的选项设置后即可创建一个初始项目文件夹。