首页 > 编程语言 > 详细

Python Tornado简介

时间:2018-08-03 23:38:35      阅读:262      评论:0      收藏:0      [点我收藏+]

Tornado安装

pip3 install tornado

 

初识Tornado

首先打开pycharm,新建一个干净的project

技术分享图片

新建一个py文件:

技术分享图片
import tornado.ioloop
import tornado.web


class MainHandler(tornado.web.RequestHandler):  # 类似于Django里面的CBV
    def get(self):  # get方法
        self.write("Hello, world")


application = tornado.web.Application([  # 类似于Django里面的路由系统
    (r"/index", MainHandler),
])

if __name__ == "__main__":
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()  # 启动
app.py

运行文件并打开浏览器访问网址:

技术分享图片技术分享图片

运行该脚本,依次执行:

  • 创建一个Application对象,并把一个正则表达式‘/‘和类名MainHandler传入构造函数:tornado.web.Application(...)  
  • 执行Application对象的listen(...)方法,即:application.listen(8888)
  • 执行IOLoop类的类的 start() 方法,即:tornado.ioloop.IOLoop.instance().start()

整个过程其实就是在创建一个socket服务端并监听8888端口,当请求到来时,根据请求中的url和请求方式(post、get或put等)来指定相应的类中的方法来处理本次请求,在上述demo中只为url为http://127.0.0.1:8888/index的请求指定了处理类MainHandler(具体如何寻找见下文)。所以,在浏览器上访问:http://127.0.0.1:8888/index,则服务器给浏览器就会返回 Hello,world ,否则返回 404: Not Found(tornado内部定义的值), 即完成一次http请求和响应。

由上述分析,我们将整个Web框架分为两大部分:

  • 待请求阶段,即:创建服务端socket并监听端口
  • 处理请求阶段,即:当有客户端连接时,接受请求,并根据请求的不同做出相应的相应

 

 

经典的Login案例

首先,创建模版文件夹和模版文件:

技术分享图片

login.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form method="POST" action="/login">
        <input type="text" name="username" />
        <input type="submit" value="提交" />
    </form>
</body>
</html>

新建一个路由:

    (r"/login", LoginHandler),

新建CBV:

class LoginHandler(tornado.web.RequestHandler):
    def get(self):
        self.render("login.html")

    def post(self, *args, **kwargs):
        # 获取url中以GET形式传递的数据
        self.get_query_argument()
        self.get_query_arguments()
        # 去请求体中获取传递的数据
        self.get_body_argument()
        self.get_body_arguments()
        # 去get&post双方去取数据
        user = self.get_argument(username)
        print(user)
        self.redirect(www.baidu.com)

注册模版文件路径:

# 申明settings,字典格式
settings = {
    template_path: tmp
}

# 注册进tornado内部
application = tornado.web.Application([
    (r"/index", MainHandler),
    (r"/login", LoginHandler),
], **settings)

整体app文件:

技术分享图片
#!/usr/bin/env python3
# encoding: utf-8
# Author: Dandy


import tornado.ioloop
import tornado.web


class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")


class LoginHandler(tornado.web.RequestHandler):
    def get(self):
        self.render("login.html")

    def post(self, *args, **kwargs):
        # 获取url中以GET形式传递的数据
        self.get_query_argument()
        self.get_query_arguments()
        # 去请求体中获取传递的数据
        self.get_body_argument()
        self.get_body_arguments()
        # 去get&post双方去取数据
        user = self.get_argument(username)
        print(user)
        self.redirect(www.baidu.com)


settings = {
    template_path: tmp
}


application = tornado.web.Application([
    (r"/index", MainHandler),
    (r"/login", LoginHandler),
], **settings)

if __name__ == "__main__":
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()
View Code

此时便可执行

技术分享图片技术分享图片

 

技术分享图片

 

关于静态文件

首先添加静态文件夹,并放入一张图片

技术分享图片

静态路径注册:

settings = {
    template_path: tmp,
    static_path: statics
}

login页面加入图片、注意以下路径写的是static,标准用法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form method="POST" action="/login">
        <input type="text" name="username" />
        <input type="submit" value="提交" />
    </form>
    <img src="/static/炫雅.jpeg" />
</body>
</html>

此时访问页面

技术分享图片

那能不能不用static作为静态文件夹名称呢?

答案当然是可以的,只需要这样注册:

settings = {
    template_path: tmp,
    static_path: statics,
    static_url_prefix: /jingtai/,  # 这里就是用户自定义的静态路径名称
}

再去修改login网页里的就好了。

 

Python Tornado简介

原文:https://www.cnblogs.com/wuzdandz/p/9416889.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!