sanic(2):创建handler
- 2019 年 11 月 21 日
- 筆記
上文说到已经创建了app,但是此时的项目里只有两个光秃秃的文件。要完成一个完整的网站,还需要在上面添加handler和templates。
添加handler
添加蓝图
我们在项目中创建包handlers,在里面添加__init__.py
和index.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
应该可以看到输出了。