sanic(2):创建handler 上文说到已经创建了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`应该可以看到输出了。 来自 大脸猫 写于 2017-06-26 17:27 -- 更新于2020-10-19 13:06 -- 0 条评论