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帐号连接到mysqlserver:

# mysql -u root

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

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

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

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

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,

以自己机器的为准.

假设没有找到,则表示你的server没有安装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

版权声明:本文博客原创文章。博客,未经同意,不得转载。

时间: 2024-10-15 11:48:02

tornado的GET POST方法样品展示的相关文章

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

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

Windows环境将Flask应用程序部署在tornado+nginx的简单方法

1.Flask的入口程序为manage.py,代码如下: #coding=utf-8#!/usr/bin/python from somewhere import app  #somewhere 表示的包含Flask的实例,如app = Flask(__name__) if __name__ == "__main__":     app.run(debug=True) 2.在manage.py的同级目录添加tornado应用程序tornado_server.py来托管manage.py

tornado跨域解决方法

class BaseHandler(tornado.web.RequestHandler): def allowMyOrigin(self): allow_list = [ 'http://127.0.0.1:7100', ] Origin = self.request.headers['Origin'] # 域名 re_ret = re.match(r".{1,}\.(haha.com|xixi.com)", Origin) # 内网和本地 re_ret2 = re.match(r&

在 tornado 中异步无阻塞的执行耗时任务

在 linux 上 tornado 是基于 epoll 的事件驱动框架,在网络事件上是无阻塞的.但是因为 tornado 自身是单线程的,所以如果我们在某一个时刻执行了一个耗时的任务,那么就会阻塞在这里,无法响应其他的任务请求,这个和 tornado 的高性能服务器称号不符,所以我们要想办法把耗时的任务转换为不阻塞主线程,让耗时的任务不影响对其他请求的响应. 在 python 3.2 上,增加了一个并行库 concurrent.futures,这个库提供了更简单的异步执行函数的方法. 如果是在

Tornado异步阻塞解决方案

在 tornado 中异步无阻塞的执行耗时任务 在 linux 上 tornado 是基于 epoll 的事件驱动框架,在网络事件上是无阻塞的.但是因为 tornado 自身是单线程的,所以如果我们在某一个时刻执行了一个耗时的任务,那么就会阻塞在这里,无法响应其他的任务请求,这个和 tornado 的高性能服务器称号不符,所以我们要想办法把耗时的任务转换为不阻塞主线程,让耗时的任务不影响对其他请求的响应. 在 python 3.2 上,增加了一个并行库 concurrent.futures,这个

使用tornado的gen.coroutine进行异步编程

在tornado3发布之后,强化了coroutine的概念,在异步编程中,替代了原来的gen.engine, 变成现在的gen.coroutine.这个装饰器本来就是为了简化在tornado中的异步编程.避免写回调函数, 使得开发起来更加符合正常逻辑思维. 一个简单的例子如下: class MaindHandler(web.RequestHandler): @asynchronous @gen.coroutine def post(self): client = AsyncHTTPClient(

tornado 框架2

转自  http://sebug.net/paper/books/tornado/ Overview FriendFeed使用了一款使用 Python 编写的,相对简单的 非阻塞式 Web 服务器.其应用程序使用的 Web 框架看起来有些像 web.py 或者 Google 的 webapp, 不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关的有用工具 和优化. Tornado 就是我们在 FriendFeed 的 Web 服务器及其常用工具的开源版本.Tornado 和

Tornado学习之异步原理

本文和大家分享的主要是Tornado 异步原理相关内容,一起来看看吧,希望对大家学习Tornado有所帮助. Tornado是什么? Tornado是一个用Python编写的异步HTTP服务器,同时也是一个web开发框架. Tornado 优秀的大并发处理能力得益于它的 web server 从底层开始就自己实现了一整套基于 epoll 的单线程异步架构. 同步.异步编程差异 .对于同步阻塞型Web服务器,我们来打个比方,将它比作一间饭馆,而Web请求就是来这家饭馆里吃饭的客人.假设饭馆店里只有