举例说明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 root@localhost=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


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

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

  1. tornado 重定向404(方法不对)

    application = tornado.web.Application(url_wrapper([ (r"", include('app.views.web_services. ...

  2. tornado框架的get方法传递参数

    tornado框架的get方法传递参数,代码: # encoding: utf-8 """ @version: ?? @author: andu99 @contact: ...

  3. centos 6.7 搭建tornado + nginx + supervisor的方法(已经实践)

    首先,本来不想写这篇博客了,但是我测试了很多网上的例子包括简书的,全不行,我总结原因是自己太笨,搞了俩个晚上,后来决定,自己还是写一篇记录下来,保证自己以后使用 环境: centos6.7 64 py ...

  4. Tornado—接口调用时方法执行顺序

    import tornado.web # web服务 import tornado.ioloop # I/O 时间循环 class MainHandler(tornado.web.RequestHan ...

  5. tornado 第二种路由方法(装饰器)

    #!/usr/bin/env python # _*_coding:utf-8 _*_ import tornado.ioloop import tornado.web application = t ...

  6. tornado跨域解决方法

    代码 class BaseHandler(tornado.web.RequestHandler): # 允许跨域访问的地址 def allowMyOrigin(self): allow_list = ...

  7. tornado 的 define 和options方法解读

    一.源码解读 tornado是facebook开源的非阻塞web容器,类似java的netty,tornado.options是负责解析tornado容器的全局参数的,同时也能够解析命令行传递的参数和 ...

  8. tornado handler 方法复用的 3 个方法

    tornado handler 调用 特性 在一次 tornado 请求中调用其他 tornado handler 中的方法, 比如 run 方法 引言 在后台开发中, 有时需要做一些功能的整合, 比 ...

  9. Tornado—options.define()方法与options.options解读

    tornado为我们提供了一个便捷的工具,tornado.options模块——全局参数定义.存储.转换. tornado是facebook开源的非阻塞web容器,类似java的netty,torna ...

随机推荐

  1. POJ 2533-Longest Ordered Subsequence(DP)

    Longest Ordered Subsequence Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 34454   Acc ...

  2. SharePoint发展 - 使用Session(代码更改webconfig)

    博客地址 http://blog.csdn.net/foxdave SharePoint启用Session能够使用Powershell,戳这里:能够改动webconfig. 本篇叙述的重点是通过fea ...

  3. 使用gSoap规避和改动ONVIF标准类型结构的解析

    ONVIF/gSoap依赖关系及问题 ONVIF是一组服务规范,标准參考 gSoap是一套基于实现SOAP通信接口的工具链 即是,当我们须要訪问ONVIF的Web Service或实现对ONVIF部分 ...

  4. 1、Cocos2dx 3.0游戏开发三找一小块前言

    尊重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27094663 前言 Cocos2d-x 是一个通用 ...

  5. 比量iOS6/iOS7, 3.5inch/4.0inch

    Retina (3.5/4 inch Screen) or Non-Retina 比量 if ([[UIScreen mainScreen] respondsToSelector:@selector( ...

  6. Ewebeditor最新漏洞和漏洞指数

    Ewebeditor最新漏洞和漏洞指数[收集] 来源:转载作者:佚名时间:2009-06-03 00:04:26 下面文章收集转载于网络:) 算是比較全面的ewebeditor编辑器的漏洞收集,如今的 ...

  7. TCP和UDP的差别

    简单的差别: TCP提供面向连接的.可靠的数据流传输,而UDP提供的是非面向连接的.不可靠的数据流传输. TCP传输单位称为TCP报文段,UDP传输单位称为用户数据报. TCP注重数据安全性,UDP传 ...

  8. MyEclipse每次修改js有另一种部署

    今天在做时间格式显示这块内容的时候.我改动了这个js函数,同一时候凝视的掉了其它的一些替换的方法,可是在浏览器中执行发现效果一点也没有改变.于是debug js,发现浏览器中识别的还是之前未改动的js ...

  9. [WPF]静态资源(StaticResource)和动态资源(DynamicResource)

    一.文章概述 本演示介绍WPF基本采用静态和动态的资源.而且两者都做一个简单的比较. 静态资源(StaticResource)指的是在程序加载内存时对资源的一次性使用,之后就不再訪问这个资源了:动态资 ...

  10. 图表引擎AChartEngine 二

    这几天项目涉及到android图表绘制,网上找的Demo都是大同小异,也就如上篇博文所写的一样是基本函数的实现.可是所有能找到的Demo都和设计图不符.木有办法,Leader发话啦,万不得已的情况下不 ...