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

posted @ 2018-10-17 10:20  rootid  阅读(175)  评论(0编辑  收藏  举报