1、Tornado 快速入门

本文是Tornado Web框架的快速入门教程,涵盖了Tornado的优势、安装、应用创建、参数处理、请求头处理和返回结果等内容。通过实例介绍了如何处理GET、POST请求,以及如何设置响应头和返回不同类型的数据。
摘要由CSDN通过智能技术生成

Tornado是Python编写的Web服务器兼Web应用框架。

优势:
  • 轻量级web框架
  • 异步非阻塞IO处理方式
  • 出色的抗负载能力
  • 优异的处理性能,不依赖多进程/多线程,一定程度上解决了C10K问题
  • WSGI全栈替代产品,推荐同时使用其Web框架和HTTP服务器
一、Tornado 安装
pip3 install tornado

# 引入tornado模块
import tornado.ioloop
import tornado.web
二、创建一个应用对象,定义路由表
# 创建一个应用对象
application = tornado.web.Application([
    # 定义路由表
    (r"/", MainHandler),  # MainHandler为路径对应的业务逻辑类
])
三、定义服务、监听端口、启动服务(以多进程操作为例)
server = tornado.httpserver.HTTPServer(application)  # 定义服务
server.bind(port)  # port为你要监听的端口号
server.start(processNum)  # 程序的进程数
tornado.ioloop.IOLoop.current().start()  # tornado.ioloop.IOLoop.current()就是默认的tornado ioloop实例。
四、开发业务逻辑类

在业务逻辑类中,需要实现get或post方法,即提供给前端调用的API。

# 实现业务逻辑类
class MainHandler(tornado.web.RequestHandler):
    # 定义get请求方法
    def get(self):
        # 返回响应数据
        self.write("hello world")
完整示例:
import tornado.ioloop
import tornado.web

# 定义业务逻辑类
class MainHandler(tornado.web.RequestHandler):
    # 定义一个处理get请求方式的方法
    def get(self):
        # 返回数据
        self.write("Hello, world")


def main():
    # 创建一个应用对象
    application = tornado.web.Application([
        # 路由表
        (r"/", MainHandler),
    ])
    
    server = tornado.httpserver.HTTPServer(application)  # 定义服务
    server.bind(8080)  # port为你要监听的端口号
    server.start(0)  # 程序的进程数
    tornado.ioloop.IOLoop.current().start()  # tornado.ioloop.IOLoop.current()就是默认的tornado ioloop实例。
    
    
if __name__ == "__main__":
    main()

在终端执行上面的示例代码:python main.py
然后在浏览器中访问localhost:8080/
就可以在页面上看到hello,world

五、参数处理

上面我们通过一个简单的示例,展示了如何在一个业务逻辑类中实现一个get接口,而且这个get接口没有接受任何的参数,但在实际的开发应用中,每个接口都需要接受参数和返回结果。

get方式传递参数(查询字符串参数)
get_query_arguments(name,default=_ARG_DEFAULT,strip=True)
get_query_argument(name ,strip=True)
  • 从请求的查询字符串中返回指定参数name的值。
  • default为设值未传name参数时返回的默认值,如若default也未设置,则会抛出tornado.web.MissingArgumentError异常。
  • strip表示是否过滤掉左右两边的空白字符,默认为过滤。(当传送密码时可以将strip设置为False)
示例:
# -*- coding:utf-8 -*-

from tornado.web import Application, RequestHandler
from tornado.ioloop import IOLoop
from tornado.httpserver import HTTPServer


class IndexHandler(RequestHandler):

    def get(self):
        # 获取get方式传递的参数
        username = self.get_query_argument("username")
        usernames = self.get_query_arguments("username")

        print (username)
        print (usernames)

if __name__ == "__main__":
    app = Application([(r"/",IndexHandler)])

    app.listen(8000)

    IOLoop.current().start()
测试代码:test.py

为了方便测试,我们另外写了一个脚本程序来模拟浏览器操作:

import requests
import json

def get_test():
    url = 'http://localhost:8000/?username=123'
    res = requests.get(url)
    print(res.status_code)


if __name__ == '__main__':
    get_test()

先运行服务端程序,在运行测试脚本,如果返回200,则说明访问成功。服务端会输出123,[123,]

post方式传递参数
get_body_arguments(name, default=_ARG_DEFAULT,strip=True)
get_body_argument(name ,strip=True)
  • 从请求体中返回指定参数name的值。default与strip同前,不再赘述。
说明

对于请求体中的数据要求为字符串,且格式为表单编码格式(与url中的请求字符串格式相同),即key1=value1&key2=value2,HTTP报文头Header中的"Content-Type"为application/x-www-form-urlencoded 或 multipart/form-data。对于请求体数据为json或xml的,无法通过这两个方法获取。

示例:服务端代码
# -*- coding:utf-8 -*-

from tornado.web import Application, RequestHandler
from tornado.ioloop import IOLoop
from tornado.httpserver import HTTPServer


class IndexHandler
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值