四个都是 Tornado 的模块,在本例中都是必须的。它们四个在一般的网站开发中,都要用到,基本作用分别是:
tornado.httpserver:这个模块就是用来解决 web 服务器的 http 协议问题,它提供了不少属性方法,实现客户端和服务器端的互通。Tornado 的非阻塞、单线程的特点在这个模块中体现。
tornado.ioloop:这个也非常重要,能够实现非阻塞 socket 循环,不能互通一次就结束。
tornado.options:这是命令行解析模块,也常用到。
tornado.web:这是必不可少的模块,它提供了一个简单的 Web 框架与异步功能,从而使其扩展到大量打开的连接,使其成为理想的长轮询。
设置静态路径
app = tornado.web.Application(
handlers=[(r'/', IndexHandler), (r'/poem', MungedPageHandler)],
template_path=os.path.join(os.path.dirname(__file__),"templates"),
static_path=os.path.join(os.path.dirname(__file__),"static"),
debug=True
)
连接mongo
frompymongoimportMongoClient
# 建立于MongoClient 的连接
client = MongoClient("localhost",27017)
# 得到数据库,只有插入数据时才会创建:
db = client.cache
# 或者
# db = client['cache']
print(db)
# 得到一个数据集合,只有插入数据时才会创建:
collection = db.test_collection
# 或者 collection = db['test-collection']
# MongoDB中的数据使用的是类似Json风格的文档:
importdatetime
post={
"author":"Mike",
"test":"My first blog post",
"tags":["mongodb","python","pymongo"],
"date":datetime.datetime.utcnow()
}
# 插入一个文档
posts = db.posts
post_id = posts.insert_one(post).inserted_id
print(post_id)
代码
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from tornado.options import define, options
define("port", default=8000, help="run on the given port", type=int)
client = MongoClient('127.0.0.1', 27017)
db = client.homework
coll = db.homework1
class IndexHandler(tornado.web.RequestHandler):
def get(self):
greeting = self.get_argument('greeting', 'Hello')
self.write(greeting + ', friendly user!')
#主方法
if __name__ == "__main__":
#解析命令行参数
tornado.options.parse_command_line()
#创建应用程序
app = tornado.web.Application(
handlers=[(r"/", IndexHandler)],
template_path=os.path.join(os.path.dirname(__file__), "templates/basic"),
static_path=os.path.join(os.path.dirname(__file__),"static"),
)
#创建Http服务器
http_server = tornado.httpserver.HTTPServer(app)
#设置监听端口
http_server.listen(options.port)
#启动服务器循环
tornado.ioloop.IOLoop.instance().start()
包装Application
class Application(tornado.web.Application):
def __init__(self):
handlers = [
(r"/", MainHandler),
]
settings = dict(
template_path=os.path.join(os.path.dirname(__file__), "templates"),
static_path=os.path.join(os.path.dirname(__file__), "static"),
debug=True,
)
tornado.web.Application.__init__(self, handlers, **settings)
if __name__ == "__main__":
tornado.options.parse_command_line()
http_server = tornado.httpserver.HTTPServer(Application())
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()