tornado学习笔记(1)HTTP请求及API测试

  Tornado是现在的主流 Web 服务器框架,它与大多数 Python 的框架有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以千计的连接,这意味着对于实时 Web 服务来说,Tornado 是一个理想的 Web 框架。
  在本文中,我们将介绍tornado的HTTP请求,包括GET、POST请求,并将介绍如何来测试该app.
  我们的项目结构如下:

项目结构

  tornado.py的完整代码如下:

# tornado的GET、POST请求示例
import os.path
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from tornado.options import define, options

#定义端口为8080
define("port", default=8080, help="run on the given port", type=int)

# GET请求
class IndexHandler(tornado.web.RequestHandler):
    # get函数
    def get(self):
        self.render('index.html')

# POST请求
# POST请求参数: name, age, city
class InfoPageHandler(tornado.web.RequestHandler):
    # post函数
    def post(self):
        name = self.get_argument('name')
        age = self.get_argument('age')
        city = self.get_argument('city')
        self.render('infor.html', name=name, age=age, city=city)

# 主函数
def main():
    tornado.options.parse_command_line()
    # 定义app
    app = tornado.web.Application(
            handlers=[(r'/', IndexHandler), (r'/infor', InfoPageHandler)], #网页路径控制
            template_path=os.path.join(os.path.dirname(__file__), "templates") # 模板路径
          )
    http_server = tornado.httpserver.HTTPServer(app)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()

main()

  templates文件夹为存放HTML文件的模板目录,其中index.html的代码如下:

<!DOCTYPE html>
<html>
<head><title>Person Info</title></head>
<body>
<h2>Enter your information:</h2>
<form method="post" action="/infor">
<p>name<br><input type="text" name="name"></p>
<p>age<br><input type="text" name="age"></p>
<p>city<br><input type="text" name="city"></p>
<input type="submit">
</form>
</body>
</html>

infor.html的代码如下:

<!DOCTYPE html>
<html>
<head><title>Welcome</title></head>
<body>
<h2>Welcome</h2>
<p>Hello, {{name}}! You are {{age}} years old now , and you live in {{city}}.</p>
</body>
</html>

  这样我们就完成了tornado的一个简单的HTTP请求的示例项目。在浏览器中输入localhost:8080/,界面如下,并在输入框中输入如下:

GET请求

  点击“提交”按钮后,页面如下:

POST请求

  以上我们已经完成了这个web app的测试,但是在网页中测试往往并不方便。以下我们将介绍两者测试web app的方法:

  • postman
  • curl

  首先是postman. postman 提供功能强大的 Web API 和 HTTP 请求的调试,它能够发送任何类型的HTTP 请求 (GET, POST, PUT, DELETE…),并且能附带任何数量的参数和 Headers.
  首先是GET请求的测试:

postman的GET请求

在Body中有三种视图模式:Pretty,Raw,Preview, Pretty为HTML代码, Raw为原始视图,Preview为网页视图。
  接着是POST请求:

postman的POST请求

  在Linux中,我们还可以用curl命令来测试以上web app.在Linux中,curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具。
  首先是curl的GET请求:

curl的GET请求

  接着是curl的POST请求:

curl的POST请求

  在本次分享中,我们介绍了tornado的HTTP请求,包括GET、POST请求,并将介绍如何使用postman和curl来测试该app.
  本次分享到此结束,欢迎大家交流~~

隐约雷鸣,阴霾天空。但盼风雨来,能留你在此。

406 声望
73 粉丝
0 条评论
推荐阅读
NLP(二十九)一步一步,理解Self-Attention
如果你在想Self-Attention(自注意力机制)是否和Attention(注意力机制)相似,那么答案是肯定的。它们本质上属于同一个概念,拥有许多共同的数学运算。  一个Self-Attention模块拥有n个输入,返回n个输出。这么...

jclian91阅读 2.7k

Ubuntu20.04 从源代码编译安装 python3.10
Ubuntu 22.04 Release DateUbuntu 22.04 Jammy Jellyfish is scheduled for release on April 21, 2022If you’re ready to use Ubuntu 22.04 Jammy Jellyfish, you can either upgrade your current Ubuntu syste...

ponponon1阅读 4k评论 1

日常Python 代码片段整理
1、简单的 HTTP Web 服务器 {代码...} 2、单行循环List {代码...} 3、更新字典 {代码...} 4、拆分多行字符串 {代码...} 5、跟踪列表中元素的频率 {代码...} 6、不使用 Pandas 读取 CSV 文件 {代码...} 7、将列表...

墨城2阅读 332

Unicode 正则表达式(qbit)
前言本文根据《精通正则表达式》和 Unicode Regular Expressions 整理。本文的示例默认以 Python3 为实现语言,用到 Python3 的 re 模块或 regex 库。基本的 Unicode 属性分类 {代码...} 基本的 Unicode 子属性Le...

qbit阅读 4.4k

Python + Sqlalchemy 对数据库的批量插入或更新(Upsert)
由于不同数据库对这种 upsert 的实现机制不同,Sqlalchemy 也就不再试图做一致性的封装了,而是提供了各自的方言 API,具体到 Mysql,就是给 insert statement ,增加了 on_duplicate_key_update 方法。

songofhawk1阅读 2k评论 4

封面图
打脸了兄弟们,Go1.20 arena 来了!
大家好,我是煎鱼。大概半年前,我写过一篇文章《Go 要违背初心吗?新提案:手动管理内存》。有兴趣了深入解的同学,可以再回顾一下。当时我们还想着 Go 团队应该不会接纳,至少不会那么快:懒得翻也可以看我再次...

煎鱼1阅读 3.3k

uwsgi 注意事项
http 和 http-socket 选项是完全不同的。第一个生成一个额外的进程,转发请求到一系列的worker (将它想象为一种形式的盾牌,与apache或者nginx同级),而第二个设置worker为原生使用http协议。

zed2015阅读 2.2k

隐约雷鸣,阴霾天空。但盼风雨来,能留你在此。

406 声望
73 粉丝
宣传栏