Tornado Web Server框架编写简易Python服务器


Posted in Python onJuly 28, 2018

我们都知道在Web开发中,都需要服务器,比如Java Web开发的Tomcat,WebLogic,WebSphere,现在来看利用Tornado Web Server框架如何写一个简易的Python服务器。

一般来说只需要实现get和post方法就可以了。以上次使用redis数据库的例子说明,数据库插入代码如下:

import redis
import datetime
 
class Database:
  def __init__(self):
    self.host = 'localhost'
    self.port = 6379
    self.write_pool = {}
 
  def add_write(self,website,city,year,month,day,deal_number):
    key = '_'.join([website,city,str(year),str(month),str(day)])
    val = deal_number
    self.write_pool[key] = val
 
  def batch_write(self):
    try:
      r = redis.StrictRedis(host=self.host,port=self.port)
      r.mset(self.write_pool)
    except Exception, exception:
      print exception
      
 
def add_data():
  beg = datetime.datetime.now()
  db = Database()
  for i in range(1,10000):
    db.add_write('meituan','beijing',2013,i,1,i)
  db.batch_write()
  end = datetime.datetime.now()
  print end-beg
      
if __name__ == '__main__':
  add_data()

以上代码插入了数据,那么现在用我们的服务器来访问一些数据。

import json
import redis
import tornado.web
import tornado.httpserver
from tornado.options import define, options
 
define("port", default=8888, type=int)
 
class DealHandler(tornado.web.RequestHandler):
  def initialize(self):
    self.port = 6379
    self.host = "localhost"
 
  def get(self):
    website = self.get_argument("website",None)
    city  = self.get_argument("city",None)
    year  = self.get_argument("year",None)
    month  = self.get_argument("month",None)
 
    keyset = []
    for i in range(1,31):
      key = '_'.join([website,city,year,month,str(i)])
      keyset.append(key)
 
    r = redis.StrictRedis(host=self.host,port=self.port)
    self.write( json.dumps(r.mget(keyset)) )
 
class ExampleHandler(tornado.web.RequestHandler):
  def get(self):
    who = self.get_argument("who", None)
    if who:
      self.write("Hello, " + who)
    else:
      self.write("Hello World!")
    
  def post(self):
    who = self.get_argument("who", None)
    if who:
      self.write("Hello, " + who)
    else:
      self.write("Hello World!")
 
class Application(tornado.web.Application):
  def __init__(self):
    handlers = [
      (r"/", ExampleHandler),
      (r"/deal", DealHandler),
    ]
    settings = dict()
    tornado.web.Application.__init__(self, handlers, settings)
 
def create_server():
  tornado.options.parse_command_line()
  http_server = tornado.httpserver.HTTPServer(Application())
  http_server.listen(options.port)
  tornado.ioloop.IOLoop.instance().start()
 
if __name__ == "__main__":
  create_server()

以上代码实现了一个简单的服务器,用于处理http请求。

在浏览器中输入:

http://localhost:8888/deal?website=meituan&city=beijing&year=2013&month=9

即可得到需要的数据。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python开发的小球完全弹性碰撞游戏代码
Oct 15 Python
python自动化测试之连接几组测试包实例
Sep 28 Python
Python实现的数据结构与算法之队列详解
Apr 22 Python
浅谈五大Python Web框架
Mar 20 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
May 29 Python
基于Python pip用国内镜像下载的方法
Jun 12 Python
使用python 3实现发送邮件功能
Jun 15 Python
python 多线程对post请求服务器测试并发的方法
Jun 13 Python
django框架CSRF防护原理与用法分析
Jul 22 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
Aug 09 Python
python 导入数据及作图的实现
Dec 03 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
Sep 16 Python
python使用tornado实现登录和登出
Jul 28 #Python
基于python实现简单日历
Jul 28 #Python
python使用tcp实现局域网内文件传输
Mar 20 #Python
基于python3实现socket文件传输和校验
Jul 28 #Python
python多进程实现文件下载传输功能
Jul 28 #Python
python如何生成网页验证码
Jul 28 #Python
python3利用tcp实现文件夹远程传输
Jul 28 #Python
You might like
SONY ICF-SW07收音机电路分析
2021/03/02 无线电
php中设置多级目录session的问题
2011/08/08 PHP
PHP将整个网站生成HTML纯静态网页的方法总结
2012/02/05 PHP
注意:php5.4删除了session_unregister函数
2013/08/05 PHP
利用ASP发送和接收XML数据的处理方法与代码
2007/11/13 Javascript
jquery自定义函数的多种方法
2014/01/09 Javascript
jquery ajax跨域解决方法(json方式)
2014/02/04 Javascript
javascript实现动态模态绑定grid过程代码
2014/09/22 Javascript
javascript修改图片src的方法
2015/01/27 Javascript
jQuery简单注册和禁用全局事件的方法
2016/07/25 Javascript
js实现文字选中分享功能
2017/01/25 Javascript
layer弹出层中H5播放器全屏出错的解决方法
2017/02/21 Javascript
React Native日期时间选择组件的示例代码
2018/04/27 Javascript
微信小程序ibeacon三点定位详解
2018/10/31 Javascript
jquery实现自定义树形表格的方法【自定义树形结构table】
2019/07/12 jQuery
[11:57]《一刀刀一天》第十七期:TI中国军团加油!
2014/05/26 DOTA
python使用递归解决全排列数字示例
2014/02/11 Python
使用Python的Flask框架实现视频的流媒体传输
2015/03/31 Python
浅谈编码,解码,乱码的问题
2016/12/30 Python
对numpy中array和asarray的区别详解
2018/04/17 Python
python实现电脑自动关机
2018/06/20 Python
Python使用sort和class实现的多级排序功能示例
2018/08/15 Python
python实现旋转和水平翻转的方法
2018/10/25 Python
python绘制动态曲线教程
2020/02/24 Python
Python语法垃圾回收机制原理解析
2020/03/25 Python
keras 模型参数,模型保存,中间结果输出操作
2020/07/06 Python
HTML5 canvas画图并保存成图片的jcanvas插件
2014/01/17 HTML / CSS
英国设计师泳装、沙滩装和比基尼在线精品店:Beach Cafe
2019/08/28 全球购物
如果一个类实现了多个接口但是这些接口有相同的方法名将会怎样
2013/06/16 面试题
大学毕业生自我鉴定
2013/11/05 职场文书
银行求职信个人范文
2013/12/16 职场文书
2015人事行政工作总结范文
2015/05/21 职场文书
KTV员工管理制度
2015/08/06 职场文书
春节随笔
2015/08/15 职场文书
Python机器学习之底层实现KNN
2021/06/20 Python
Win11怎样将锁屏账户头像图片改成动画视频
2021/11/21 数码科技