d100_tornado基本操作
d100_tornado基本操作
tornado路由系统:
url -> 类(根据method执行方法)
tornado控制器(Handler)
class Foo(xxx):
def get(self):
self.render()
self.write()
self.redirect()
self.get_argument()
self.get_arguments()
self.get_cookie()
self.set_cookie()
self.set_secure_cookie()
self.get_secure_cookie() #加密cookie依赖配置文件
self.request.files['filename']
self._headers
#self.request对象 from tornado.httputil import HTTPServerRequest
示例目录结构:遵循MVC架构(model,view,controller)
login_test/
├── config
│ |
│ │
│ └── setting.py
├── controller
│ ├── account.py
│ ├── home.py
│ └── __init__.py
|
├── start_app.py
└── views
├── home.html
├── __init__.py
└── login.html
示例代码
cat start_app.py
#!/usr/bin/env python
# -*-coding:utf-8-*-
# author: Mr.Wu
import tornado.ioloop
import tornado.web
# 从controller目录中导入相关Handler
from controller.account import LoginHandler
from controller.home import HomeHandler
from controller.main import MainHandler
# 导入settings字典,即配置文件中的相关参数
from config.setting import settings
# rl与Handler关联,实际项目中这里可以再抽出到一个文件中
application = tornado.web.Application([
(r"/login", LoginHandler),
(r"/home", HomeHandler),
], **settings) # 把settings相关参数注册到tornado.web.Application
# 设置监听端口及启动
if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
cat settings.py
settings = {
"template_path": "views", # 设置html模板文件路径
"cookie_secret": 'my_cookie_pass', #设置加密cookie的密码,因为如果使用加密cookie,依赖此项设置
}
cat account.py
import tornado.web
class LoginHandler(tornado.web.RequestHandler): # 类继承tornado.web.RequestHandler
def get(self, *args, **kwargs): # get方法就渲染login.html
self.render("login.html", **{"msg": ""}) # 这时的msg为空,tornado中必须指定
def post(self, *args, **kwargs): # post方法时调用
username = self.get_argument("username") #通过get_argument方法获取post提交的参数
password = self.get_argument("password")
if username == 'test' and password == '123': #判断用户密码是否正确
# self.write("login sucess!")
self.set_secure_cookie("is_login", username) #如果验证通过,就设置加密cookie的值为用户名,也可以设置为其它
self.redirect("/home") #重定向URL到/home,执行/home关联的handler的get方法
else:
self.render("login.html", **{"msg": "username or password invalid"})
# 如果验证未通过,重新渲染login.html,并且传递提示信息msg
cat login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/login" method="post">
<input type="text" name="username">username:</input>
<input type="password" name="password">password:</input>
<input type="submit" value="提交"/>{{msg}}
</form>
</body>
</html>
cat home.py
import tornado.web
class HomeHandler(tornado.web.RequestHandler):
def get(self, *args, **kwargs):
login_user = self.get_secure_cookie("is_login") #从cookie中取出用户名
if not login_user: #如果能取到值,说明验证通过
self.redirect("login", **{"msg": ""}) #如果验证未通过,重定向到login关联的login.html
return #tornado中一定要手动return,与Django中的一个区别,Django自动就return
self.render("home.html", **{"msg": "welcome","username":login_user}) #验证通过,渲染home.html,显示欢迎信息
http://www.cnblogs.com/wupeiqi/articles/5341480.html