前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >sanic(2):创建handler

sanic(2):创建handler

作者头像
超级大猪
发布2019-11-21 20:28:57
5380
发布2019-11-21 20:28:57
举报
文章被收录于专栏:大猪的笔记大猪的笔记

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

添加handler

添加蓝图

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

代码语言:javascript
复制
├── app.py
├── handlers
│   ├── index.py
│   ├── __init__.py
├── run_qb_games.py
├── srvconf.py

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

代码语言:javascript
复制
import logging
from sanic import Blueprint

games_bp = Blueprint('games', url_prefix='/games')

import handlers.index

响应蓝图

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

代码语言:javascript
复制
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,在里面添加如下内容:

代码语言:javascript
复制
......
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 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 添加handler
    • 添加蓝图
      • 响应蓝图
        • 调用蓝图
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档