如何用tornado搭建你自己的博客 (一)

2016-10-07 14:23:56来源:oschina作者:TinchyChin人点击



#介绍
Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本。它是运行在Python上,同样也是非阻塞式服务器环境,并且支持异步处理。
我们来介绍一下如何用这款服务器框架搭建简单的博客程序并运行在python3环境下。
#下载和安装
自动安装: Tornado 已经列入 PyPI ,因此可以通过 pip 或者 easy_install 来安装。如果你没有安装 libcurl 的话,你需要将其单独安装到系统中。请参见下面的安装依赖一节。注意一点,使用 pip 或 easy_install 安装的 Tornado 并没有包含源代码中的 demo 程序。
```
#Mac or Windows (Python 2.6+) or (Python 3)
sudo pip install tornado
##or##
sudo pip3 install tornado
#Ubuntu Linux (Python 2.6+) or (Python 3)
sudo pip install tornado
##or##
sudo pip3 install tornado
```
手动安装: 下载 [tornado-4.4.1.tar.gz](https://pypi.python.org/packages/source/t/tornado/tornado-4.4.1.tar.gz)
```
tar xvzf tornado-4.4.1.tar.gz
cd tornado-4.4.1
python3 setup.py build
sudo python setup.py install
```
##Hello, world
以下是经典的 "Hello, world" 示例 helloworld.py:
```
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
application = tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
```
然后 run
```
python3 helloworld.py
```
![![输入图片说明](https://static.oschina.net/uploads/img/201609/25103352_NYwv.png "在这里输入图片标题")](https://static.oschina.net/uploads/img/201609/25103352_NYwv.png "在这里输入图片标题")
打开[http://127.0.0.1:8888](http://127.0.0.1:8888)
![输入图片说明](https://static.oschina.net/uploads/img/201609/25110158_Apow.png "在这里输入图片标题")
#开始制作
##第一步:搭建环境
之前已经讲解了搭建基本的环境 Python3 和 安装Tornado,这里都是基于最新版的python和tornado环境,接下来讲解构架。
![输入图片说明](https://static.oschina.net/uploads/img/201609/25103542_RbRB.png "在这里输入图片标题")
app.py:总服务的入口,包括了引入tornado的库以及之后要使用的数据库。
routes.py:其实这个文件可以不需要被单独列出来,因为这是用来处理网站的路由的控制器,可以被包括在app.py里,但是我们这里为了美观简单操作,把控制器的部分单独拿出来。
templates:存放html的文件夹,是网站的模版文件。
static:用来存放css,js,imgs等静态文件的文件夹。
制作过程中如果有不懂的地方或者不清楚的地方可以打开中文版的torndao官方文档查看,[https://tornado-zh.readthedocs.io/zh/latest/](https://tornado-zh.readthedocs.io/zh/latest/)
其次,本文中使用的数据库为mongodb数据库,python端则使用motor的mongo数据库引擎。
安装motor可以使用:
#Mac or Windows
```
sudo pip3 install motor
```
安装mongodb数据库:
```
#Mac:
brew install mongodb
```
没有安装homebrew的同学请使用下面的命令来安装homebrew:
```
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```
然后执行 brew install mongodb
windows请在[官网](https://www.mongodb.com/download-center#community)下载mongodb的最新版。##第二步:修改文件
之前已经有了基础的helloworld.py,我们将它改写添加所需要的东西,将文件名改写成app.py,并放入我们的项目路径中。
创建Blog文件夹,将app.py放入Blog文件夹中。创建上面提到的其他文件以及文件夹。
![输入图片说明](https://static.oschina.net/uploads/img/201609/25105058_XRJo.png "在这里输入图片标题")
打开app.py,将里面的Mainhandler的部分移入routes.py中, 加入setting设置,并在app.py中导入routes.py
app.py
```
import tornado.ioloop
import tornado.web
import os
from routes import * # 导入routes
settings = {
"static_path": os.path.join(os.path.dirname(__file__), "static"),
"template": os.path.join(os.path.dirname(__file__), "templates"),
"debug":True,
"login_url": "/login",
}
def make_app():
return tornado.web.Application([
(r"/", MainHandler),
], **settings) #添加setting到make_app
if __name__ == "__main__":
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
```
routes.py
```
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
```
现在运行的状态和之前运行的helloworld.py应该是一样的。
```
Hello World
```
然后我们在app.py修改网站的路由,添加以下url的控制:
```
import tornado.ioloop
import tornado.web
import os
from routes import *
settings = {
"static_path": os.path.join(os.path.dirname(__file__), "static"),
"template": os.path.join(os.path.dirname(__file__), "templates"),
"debug":True,
"login_url": "/login",
}
def make_app():
return tornado.web.Application([
(r"/", MainHandler), #首页显示文章
'''
新增
'''
(r"/login", LoginHandler), #登陆页面
(r"/2014th7cj/d/file/p/20161007/idfa1k3ouce", RegisterHandler), #注册用户
(r"/post", PostHandler), #发表文章页面
(r"/user", UserHandler), #用户资料页面
(r"/article", ArticleHandler), #文章页面
], **settings) #添加setting到make_app
if __name__ == "__main__":
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
```
并在routes.py中添加相应的class控制,
```
import tornado.web
import tornado.ioloop
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.render("templates/index.html")
class LoginHandler(tornado.web.RequestHandler):
def get(self):
self.render("templates/login.html")
class RegisterHandler(tornado.web.RequestHandler):
def get(self):
self.render("templateshttps://my.oschina.net/register.html")
class PostHandler(tornado.web.RequestHandler):
def get(self):
self.render("templates/post.html")
class UserHandler(tornado.web.RequestHandler):
def get(self):
self.render("templates/user.html")
class ArticleHandler(tornado.web.RequestHandler):
def get(self):
self.render("templates/article.html")
```
然后在templates文件夹下建立对应的html文件
login.html
```



登陆


登陆








没有账号?点击注册



```
register.html
```



注册


注册新账户










已经有账号?登陆



```
post.html
```



发表


发表文章