zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    微信商城中使用微信支付接口获取用户地址
    微信支付开发流程
    沉默多年,重新开博
    Extjs 表单验证后,几种错误信息展示方式
    自己对Extjs的Xtemplate的忽略
    js execCommand
    支付宝支付
    C# 将短时间格式变长正常时间格式
    SortedDictionary
    sql操作
  • 原文地址:https://www.cnblogs.com/rootid/p/9802464.html
Copyright © 2011-2022 走看看