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 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方法样品展示的更多相关文章
- tornado 重定向404(方法不对)
application = tornado.web.Application(url_wrapper([ (r"", include('app.views.web_services. ...
- tornado框架的get方法传递参数
tornado框架的get方法传递参数,代码: # encoding: utf-8 """ @version: ?? @author: andu99 @contact: ...
- centos 6.7 搭建tornado + nginx + supervisor的方法(已经实践)
首先,本来不想写这篇博客了,但是我测试了很多网上的例子包括简书的,全不行,我总结原因是自己太笨,搞了俩个晚上,后来决定,自己还是写一篇记录下来,保证自己以后使用 环境: centos6.7 64 py ...
- Tornado—接口调用时方法执行顺序
import tornado.web # web服务 import tornado.ioloop # I/O 时间循环 class MainHandler(tornado.web.RequestHan ...
- tornado 第二种路由方法(装饰器)
#!/usr/bin/env python # _*_coding:utf-8 _*_ import tornado.ioloop import tornado.web application = t ...
- tornado跨域解决方法
代码 class BaseHandler(tornado.web.RequestHandler): # 允许跨域访问的地址 def allowMyOrigin(self): allow_list = ...
- tornado 的 define 和options方法解读
一.源码解读 tornado是facebook开源的非阻塞web容器,类似java的netty,tornado.options是负责解析tornado容器的全局参数的,同时也能够解析命令行传递的参数和 ...
- tornado handler 方法复用的 3 个方法
tornado handler 调用 特性 在一次 tornado 请求中调用其他 tornado handler 中的方法, 比如 run 方法 引言 在后台开发中, 有时需要做一些功能的整合, 比 ...
- Tornado—options.define()方法与options.options解读
tornado为我们提供了一个便捷的工具,tornado.options模块——全局参数定义.存储.转换. tornado是facebook开源的非阻塞web容器,类似java的netty,torna ...
随机推荐
- hdu 2051 Bitset (java)
问题: 之前做过类似题,但这次仍然不能解决相关问题. 字符串倒过来输:StringBuffer str=new StringBuffer(s); s=str.reverse().toString() ...
- Multitasking Apps may only use background services for their intended purposes
2.16 Details Your app declares support for audio in the UIBackgroundModes key in your Info.plist, bu ...
- 【Oracle】物理体系结构
一.ORACLE 物理体系结构 原理结构图 各部分解释: PGA: 私有内存区,仅供当前发起用户使用. 三个作用 用户登录后的session信息会保存在PGA. 运行排序.假设内存不够,orac ...
- linux 除了某个文件或某个目录以外所有删除
rm `ls | grep -v "aa"` //删除除带aa字符串的全部文件 ls | grep -v keep | xargs rm //除keep字符串的以外全删除 r ...
- cisco(思科)交换机配置篇【两】
上一页大家津津乐道cisco基本操作命令开关,而端午假期,该cisco简单的开关配置,并希望请您分享"端午节快乐"!Ok,配置交换机,首先,你必须进入全局配置模式Switch,在成 ...
- [Elasticsearch] 邻近匹配 (三) - 性能,关联单词查询以及Shingles
提高性能 短语和邻近度查询比简单的match查询在性能上更昂贵.match查询仅仅是查看词条是否存在于倒排索引(Inverted Index)中,而match_phrase查询则须要计算和比較多个可能 ...
- iOS 购物—个人中心界面
上一个QQ界面真实无心插柳,想不到一个新手的普通界面可以上首页推荐,在这谢谢那些csdn工作者对新手的支持,谢谢soledadzz 的特别推荐: 以下这个界面也是师傅锻炼我的题目主要是让我熟悉tab ...
- 新浪微博。。openapi 分享 图画+ 写作
新浪微博困难啊 .. . .. .郁闷死了. .在此记录它 1.使用界面:https://api.weibo.com/2/statuses/upload_url_text.json 能够申请,.高级权 ...
- [原创]如何编写多个阻塞队列连接下的多生产者多消费者的Python程序
平常在写程序时,往往会遇到一个需求:在程序的多个阶段都会出现阻塞的可能,因此,这多个阶段就需要并发执行. Python的多线程有一个特点,就是不允许从外部结束一个运行中的线程,这给我们编写代码时带来了 ...
- ffmpeg架构和解码流程分析
转 一,ffmpeg架构 1. 简介 FFmpeg是一个集录制.转换.音/视频编码解码功能为一体的完整的开源解决方案.FFmpeg的 开发是基于Linux操作系统,但是可以在大多数操作系统中编译和使用 ...