主要模块
web – FriendFeed 使用的基础 Web 框架,包含了 Tornado 的大多数重要的功能
escape – XHTML, JSON, URL 的编码/解码方法
database – 对 MySQLdb 的简单封装,使其更容易使用
template – 基于 Python 的 web 模板系统
httpclient – 非阻塞式 HTTP 客户端,它被设计用来和 web 及 httpserver 协同工作
auth – 第三方认证的实现(包括 Google OpenID/OAuth、Facebook Platform、Yahoo BBAuth、FriendFeed OpenID/OAuth、Twitter OAuth)
locale – 针对本地化和翻译的支持
options – 命令行和配置文件解析工具,针对服务器环境做了优化
底层模块
httpserver – 服务于 web 模块的一个非常简单的 HTTP 服务器的实现
iostream – 对非阻塞式的 socket 的简单封装,以方便常用读写操作
ioloop – 核心的 I/O 循环
首先在建立一个mysql数据库,库名为test_tornado,建立一个有用户表,表中包含用户名密码,脚本如下。
CREATE TABLE `user` ( `id` int(100) NOT NULL DEFAULT '0', `user` varchar(20) DEFAULT NULL, `passwd` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`) ); INSERT INTO `user` VALUES ('0', 'simonzhang', '123456');
建立监听,和url,启停脚本见上次笔记。
main.py
#!/bin/python #-*- coding:utf-8 -*- # Filename: main.py # Revision: 1.0 # Date: 2012-06-14 # Author: simonzhang # web: www.simonzhang.net # Email: simon-zzm@163.com ### END INIT INFO import sys import tornado.ioloop import tornado.web from login import * application = tornado.web.Application([ (r"/", LoginHandler), ], cookie_secret="61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o/Vo=") if __name__ == "__main__": listen_port = sys.argv[1] application.listen(listen_port) tornado.ioloop.IOLoop.instance().start()
在同级目录下建立templates目录,在templates目录下建立login.html。login.html的源码是
{{title}}
做一个简单的验证页面,只是个简单判断,学习使用,权限认证和cookie部分不做记录了。编辑login.py源码
#!/bin/python #-*- coding:utf-8 -*- # Filename: main.py # Revision: 1.0 # Date: 2012-06-14 # Author: simonzhang # web: www.simonzhang.net # Email: simon-zzm@163.com ### END INIT INFO import sys import tornado.ioloop import tornado.locale import tornado.web import tornado.database from dbmodel import * class LoginHandler(tornado.web.RequestHandler): def get(self): self.render("templates/login.html", title="simonzhan.net") def post(self): try: name = self.get_argument("login_username") passwd = self.get_argument("login_password") _passwd = get_passwd(name) if _passwd is not None: if _passwd == _passwd: self.write("hello %s" % (_passwd)) else: self.render("templates/login.html", title="simonzhan.net") else: self.render("templates/login.html", title="simonzhan.net") #self.write("hello %s" % (name)) except: self.render("templates/login.html", title="simonzhan.net") return
因为要查数据,所以要用到database,将数据库部分放到一文件中去。编辑dbmodol.py源码如下:
#!/bin/env python # -*- coding: utf-8 -*- # Filename: main.py # Revision: 1.0 # Date: 2012-06-14 # Author: simonzhang # web: www.simonzhang.net # Email: simon-zzm@163.com ### END INIT INFO from tornado import database def get_passwd(user_name): db = database.Connection("192.168.1.41","test_tornado","123456","simonzhang") for projects in db.query("SELECT user,passwd from user where user='%s'" % user_name): return projects.passwd
启动服务,在ie里能看到页面,输入正确的账户密码,可以看到经典的话了。基本框架完成,剩下的慢慢学习,慢慢发挥了。
我安装tornado3.0版本居然没有database这个模块?
我主要的还是在用2.4。3.0.1确实有变化,有空要学习学习