主要模块
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里能看到页面,输入正确的账户密码,可以看到经典的话了。基本框架完成,剩下的慢慢学习,慢慢发挥了。