tornado的GET POST方法示例

例子说明get和post的方法使用:

一、示例用的GET方法:

import tornado.ioloop

import tornado.web

class MainHandler(tornado.web.RequestHandler):

def get(self):

self.write("Hello, world")

application = tornado.web.Application([

(r"/", MainHandler),

])

if __name__ == "__main__":

application.listen(8888)

tornado.ioloop.IOLoop.instance().start()

运行

# python tornado_example.py,

然后打开浏览器,输入http://ip:8888就看到页面输出Hello, world了。

二、GET&POST 代码

1. tornado-serv.py

#!/usr/bin/python

# File : tornado-serv.py

import torndb

import tornado.web

import tornado.ioloop

from tornado.options import define,options,parse_command_line

define(‘port‘,default=8888,help=‘run on the port‘,type=int)

database=torndb.Connection(‘localhost‘,‘talk‘,user=‘root‘,password=‘123456‘)

l=[]

class MainHandler(tornado.web.RequestHandler):

def get(self):

self.render(‘example.html‘,title=‘Tornado GET&POST‘,items=l)

def post(self):

count=1

print(self.request.remote_ip)

talk=self.get_argument(‘talk‘)

talk=str(talk)

database.execute(‘insert into chatting(id,content)
values(%d,"%s")‘%(count,talk))

l.append(talk)

self.render(‘example.html‘,title=‘Tornado GET&POST‘,items=l)

?

def main():

parse_command_line()

app=tornado.web.Application(

[(r‘/‘,MainHandler),

],)

app.listen(options.port)

tornado.ioloop.IOLoop.instance().start()

if __name__==‘__main__‘:

main()

?

2. example.html的内容如下:

<html>

<head>

<title>{{title}}</title>

</head>

<body>

<form name=‘input‘ action=‘/‘ method=‘post‘>

talk:

<input type=‘text‘ name=‘talk‘/>

<input type=‘submit‘ value=‘send‘/>

</form>

<ul>

{%for i in items%}

<li>{{escape(i)}}</li>

{%end%}

</ul>

</body>

</html>

三、数据库操作

以root帐号连接到mysql服务器:

# mysql -u root

如果提示找不到mysql文件,请尝试使用绝对路径,如本文示例为:

# /usr/local/mysql/bin/mysql -u root

命令成功执行后将进入到mysql命令提示符下:

1. 设置从本地主机登录的root帐号密码:

mysql> set password for [email protected]=password(‘123456‘);

2. 创建"talk"数据库

mysql> create database talk;

3. 创建"chatting"表

mysql> use talk;

mysql> create table chatting(id int, content char(128));

4. 查看表

mysql> describe chatting;

+---------+-----------+------+-----+---------+-------+

| Field   | Type      | Null | Key | Default | Extra |

+---------+-----------+------+-----+---------+-------+

| id      | int(11)   | YES  |     | NULL    |       |

| content | char(128) | YES  |     | NULL    |       |

+---------+-----------+------+-----+---------+-------+

四、出错问题解决

1. 运行 tornado-serv.py时报错:

python tornado_serv.py

Traceback (most recent call last):

File "tornado_serv.py", line 6, in <module>

import torndb

ImportError: No module named torndb

解决:

需要安装 torndb

# pip install torndb

2. 运行 tornado-serv.py时报错:

Traceback (most recent call last):

File "tornado_serv.py", line 6, in <module>

import torndb

File "/usr/local/python2.7.3/lib/python2.7/site-packages/torndb.py", line 33, in <module>

import MySQLdb.constants

ImportError: No module named MySQLdb.constants

解决:

安装MySQL-python-1.2.3

# wget http://sourceforge.net/projects/mysql-python/files/mysql-python/1.2.3/MySQL-python-1.2.3.tar.gz/download

# tar zxf MySQL-python-1.2.3.tar.gz && cd MySQL-python-1.2.3

# python setup.py build

# python setup.py install

如果在执行python setup.py build时,报EnvironmentError: mysql_config not found的话,

先查找mysql_config的位置,使用

# find / -name mysql_config

我的是在/usr/local/mysql/bin/mysql_config,

然后修改MySQL-python-1.2.3目录下的site.cfg文件,

去掉mysql_config=XXX这行的注释,并改成

mysql_config=/usr/local/mysql/bin/mysql_config,

以自己机器的为准.

如果没有找到,则表示你的服务器没有安装mysql,需要先安装。

再执行下面命令就可以了

python setup.py build

python setup.py install

3. 运行 python tornado_serv.py  时报错:

Traceback (most recent call last):

File "tornado_serv.py", line 6, in <module>

import torndb

File "/usr/local/python2.7.3/lib/python2.7/site-packages/torndb.py", line 33, in <module>

import MySQLdb.constants

File "build/bdist.linux-x86_64/egg/MySQLdb/__init__.py", line 19, in <module>

File "build/bdist.linux-x86_64/egg/_mysql.py", line 7, in <module>

File "build/bdist.linux-x86_64/egg/_mysql.py", line 6, in __bootstrap__

ImportError: libmysqlclient_r.so.15: cannot open shared object file: No such file or directory

解决:

查找动态库 libmysqlclient_r.so

# find / -name libmysqlclient_r.so

/usr/local/mysql/lib/mysql/libmysqlclient_r.so

将包含库的目录 /usr/local/mysql/lib/mysql

添加到库查找路径

# vim /etc/ld.so.conf

最后一行添加:

/usr/local/mysql/lib/mysql

【保存并退出】

# ldconfig

4. python tornado_serv.py

ERROR:root:Cannot connect to MySQL on localhost

Traceback (most recent call last):

File "/usr/local/python2.7.3/lib/python2.7/site-packages/torndb.py", line 96, in __init__

self.reconnect()

File "/usr/local/python2.7.3/lib/python2.7/site-packages/torndb.py", line 113, in reconnect

self._db = MySQLdb.connect(**self._db_args)

File "build/bdist.linux-x86_64/egg/MySQLdb/__init__.py", line 81, in Connect

return Connection(*args, **kwargs)

File "build/bdist.linux-x86_64/egg/MySQLdb/connections.py", line 187, in __init__

super(Connection, self).__init__(*args, **kwargs2)

OperationalError: (1045, "Access denied for user ‘root‘@‘localhost‘ (using password: YES)")

解决:

是因为数据库没有设置并创建表;

五、页面测试

浏览器打开 "http://ip:8888" 的时候,发出 "GET"请求,请求根目录"/",

根据tornado.web.Application中参数列表中元组对(r‘/‘,MainHandler),于是找到MainHandler类,

这个类继承了tornado.web.RequestHandler类,但是它里面没有定义get和post方法(具体可以看源码),

所以在MainHandler类中定义。

由于我只在用户第一次访问网站时处理get方法,

所以就是render example.html 就可以了。

之后传递数据全用 "POST" 方法,并把网页上输入的数据存放到数据库中。

浏览器显示如下:

数据库中显示如下:

mysql> select * from chatting;

+------+--------------------------+

| id   | content                  |

+------+--------------------------+

|    1 | hello                    |

|    1 | who                      |

|    1 | this is                  |

|    1 | what are you doing       |

|    1 | fet                      |

|    1 | this is my first version |

+------+--------------------------+

6 rows in set (0.00 sec)

终端显示如下:

[@ltv_13 python_study]# python tornado_serv.py

[I 140719 10:11:17 web:1811] 304 GET / (192.168.9.91)
3.42ms

192.168.9.91

[I 140719 10:11:20 web:1811] 200 POST / (192.168.9.91)
1.13ms

192.168.9.91

[I 140719 10:11:25 web:1811] 200 POST / (192.168.9.91)
0.85ms

192.168.9.91

[I 140719 10:11:35 web:1811] 200 POST / (192.168.9.91)
0.80ms

192.168.9.91

[I 140719 10:11:46 web:1811] 200 POST / (192.168.9.91)
0.82ms

192.168.9.91

[I 140719 10:11:51 web:1811] 200 POST / (192.168.9.91)
0.78ms

192.168.9.91

[I 140719 10:12:09 web:1811] 200 POST / (192.168?.9.91)
0.99ms

tornado的GET POST方法示例

时间: 2024-08-29 14:44:06

tornado的GET POST方法示例的相关文章

问答项目---栏目增删改方法示例

具体方法: // 递归重新排序无限极子分类数组 function recursive($array,$pid=0,$level=0){ $arr = array(); foreach ($array as $v) { if($v['pid'] == $pid){ $v['level'] = $level; $v['html'] = str_repeat('--',$level); $arr[] = $v; $arr = array_merge($arr,recursive($array,$v['

jQ的toggle()方法示例

定义和用法toggle() 方法切换元素的可见状态.如果被选元素可见,则隐藏这些元素,如果被选元素隐藏,则显示这些元素. 语法$(selector).toggle(speed,callback,switch) 参数: speed 可选.规定元素从可见到隐藏的速度(或者相反).默认为 "0".可能的值:毫秒 (比如 1500)"slow""normal""fast"在设置速度的情况下,元素从可见到隐藏的过程中,会逐渐地改变其高度

Android播放动画的方法示例

今天开始陆续整理一下一些常规的Android常用开发实用程序. 第一季:Android播放动画的方法示例 1. 通常动画都是gif图像,推荐使用easygifanimator工具来将其拆解为多个图片,建议是png的: 2. 在Android工程的res目录下新增anim目录,新建一个xml文件,比如loading.xml: <?xml version="1.0" encoding="utf-8"?> <animation-list android:

php读取文件内容的多种方法示例代码

分享下php中读取文件内容的几种方法,各有千秋,与大家共勉. 示例代码1: 用file_get_contents 以get方式获取内容<?php$url='http://www.jbxue.com/';$html=file_get_contents($url);//print_r($http_response_header);ec($html);printhr();printarr($http_response_header);printhr();?> 示例代码2: 用fopen打开url,

tornado框架的get方法传递参数

tornado框架的get方法传递参数,代码: # encoding: utf-8 """ @version: ?? @author: andu99 @contact: [email protected] @site: http://www.cnblogs.com/andu99/ @software: PyCharm @file: main.py @time: 2018/5/9 0009 上午 11:05 """ from tornado.iol

java.lang.reflect.Method.getAnnotation()方法示例【通过反射获取到方法对象再获取方法对象上的注解信息】

转: java.lang.reflect.Method.getAnnotation()方法示例 java.lang.reflect.Method.getAnnotation(Class <T> annotationClass)方法如果存在这样的注释,则返回指定类型的元素的注释,否则为null. 声明 以下是java.lang.reflect.Method.getAnnotation(Class <T> annotationClass)方法的声明. public <T exte

在Python中使用gRPC的方法示例【h】

本文介绍了在Python中使用gRPC的方法示例,分享给大家,具体如下: 使用Protocol Buffers的跨平台RPC系统. 安装 使用 pip ? 1 2 pip install grpcio pip install grpcio-tools googleapis-common-protos gRPC由两个部分构成,grpcio 和 gRPC 工具, 后者是编译 protocol buffer 以及提供生成代码的插件. 使用 编写protocol buffer 使用 gRPC 首先需要做

Python Web框架Tornado的异步处理代码示例

1. What is Tornado Tornado是一个轻量级但高性能的Python web框架,与另一个流行的Python web框架Django相比,tornado不提供操作数据库的ORM接口及严格的MVC开发模式,但可以提供基本的web server功能,故它是轻量级的:它借助non-blocking and event-driven的I/O模型(epoll或kqueue)实现了一套异步网络库,故它是高性能的. Tornado的轻量级+高性能特性使得它特别适用于提供web api的场合,

窗体传值的两种实现方法示例

这两天看前辈的视频初识了窗体传值,于是自己跟着敲了两个Demo,方便以后复习.分享交流. 窗体传值的两种方法:1.通过属性构造方法传值 2.利用委托实现传值. 示例1:点击Form1中的按钮打开From2,点击Form2中的按钮改变窗体Form1的背景颜色. Form1的代码: 1 public partial class Form1 : Form 2 { 3 public Form1() 4 { 5 InitializeComponent(); 6 } 7 8 private void but