sanic(2):创建handler

  • 2019 年 11 月 21 日
  • 筆記

上文说到已经创建了app,但是此时的项目里只有两个光秃秃的文件。要完成一个完整的网站,还需要在上面添加handler和templates。

添加handler

添加蓝图

我们在项目中创建包handlers,在里面添加__init__.pyindex.py两个文件。结构如下:

├── app.py  ├── handlers  │   ├── index.py  │   ├── __init__.py  ├── run_qb_games.py  ├── srvconf.py

值得注意的是,sanic提供了蓝图(blueprints)这个功能,有点类似于django的app。 在__init__.py中输入如下内容,创建蓝图games_bp,它的前缀是/games,也就是说,这个蓝图下的handler都要使用/games前缀才能访问。

import logging  from sanic import Blueprint    games_bp = Blueprint('games', url_prefix='/games')    import handlers.index

响应蓝图

蓝图是一个构架,需要为这个构架写实际的代码来响应。在index.py中创建一个sanic的handler,并把它添加到蓝图。代码很简单:

from sanic.response import html,json  import logging  from handlers import games_bp      @games_bp.route('/index', methods=['GET'])  async def index(request):      logging.info("index run")      return html('hello')

调用蓝图

有了有内容的蓝图,还需要在app中进行调用。转到代码app.py,在里面添加如下内容:

......  from sanic import Sanic  enable_async = sys.version_info >= (3, 6)  app = Sanic(__name__)    # 在这里导入blueprints,注意顺序在app之后,因为games_bp引入的包也可能导入app这个神对象  # 这样的循环依赖会导致app 被创建两次。  from handlers import games_bp  app.blueprint(games_bp)  ......

此时,再运行python3.6 run_qb_games.py -p 80 -d True,打开浏览器,在localhost/games/index应该可以看到输出了。