您的位置:首页 > 其它

使用tornado创建一个简单的图书介绍页面

2014-09-27 23:55 961 查看
这两天在看tornado user guide http://www.tornadoweb.org/en/stable/guide.html 中文翻译http://demo.pythoner.com/itt2zh/index.html
看完UI模块后就想用豆瓣的图书API来搞一个简单的图书介绍页面,也加深一下理解
一、创建一个web服务的入口文件 blockmain.py

<html>
<head>
    <title>{{ page_title }}</title>
    <link rel="stylesheet" href="{{ static_url("css/style.css") }}" />
</head>
<body>
    <div id="container">
        <header>
            {% block header %}<h1>Burt's Books</h1>{% end %}
        </header>
        <div id="main">
            <div id="content">
                {% block body %}{% end %}
            </div>
        </div>
        <footer>
            {% set mailLink = '<a href="mailto:contact@burtsbooks.com">Contact Us</a>' %}
            {% set script = '<script>alert("hello")</script>' %}
            {% block footer %}

                <p>
                    For more information about our selection, hours or events, please email us at{% raw mailLink %}

                    <!-- {% raw script %} 这里将原样输出,也就是会弹一个框--> 
                </p>
            {% end %}
        </footer>
    </div>
    <script src="{{ static_url("js/script.js") }}"></script>
    </body>
</html>

这里是定义了一个主框架,其中里面的{% block header %}<h1>Burt's Books</h1>{% end %}是为了子类模板的继承的块(block),当子类继承了这个main.html,具体这个块里写什么内容由子类来实现,不实现的话就使用父类的默认 值,如是这里的<h1>Burt's Books</h1>,MainHandler类是render到一个index.html,那么接下来写一个index.html来继承这 个父类



class BookModule(tornado.web.UIModule):
    def render(self,bookname):
        doubanapi = r'https://api.douban.com/v2/book/'
        searchapi = r'https://api.douban.com/v2/book/search?q='
        searchurl = searchapi+bookname
        searchresult = urllib2.urlopen(searchurl).read()
        bookid = json.loads(searchresult)['books'][0]['id']
        bookurl = doubanapi+bookid
        injson = urllib2.urlopen(bookurl).read()
        bookinfo =  json.loads(injson)
        return self.render_string('modules/book.html',book = bookinfo)

BookModule 继承自tornado.web.UIModule,UI模块的使用是最后render_string()方法来把一个对象渲染到一个模板中去,我这里简单 的使用了豆瓣的图书api,先通过search来查询一下包含关键词的图书信息,返回第一条图书的id,再使用book api来查询该图书的具体信息,将这个具体图书的信息render到对应的模板
在templates 目录下创建modules目录,再下创建一个book.html,这里是具体的book要显示的内容框架

├── blockmain.py
└── templates
    ├── index.html
    ├── main.html
    └── modules
        └── book.html



程序的执行是这样的
先通过路径‘/’来使用MainHandler类访问index.html---->index.html继承自 main.html---->index.html中的{% module Book(book) %}反过来查找blockmain.py中的Book对应的ui_modules---->ui_modules中将查询得到的book对象内容渲 染到modules下的book.html中,这样就把完整的内容呈现出来了,没有做前端…… 通过python blockmain.py启动服务,通过http://localhost:8000 来访问得到如下的网页


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: