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使用Flask框架获取用户IP地址的方法
Mar 21 Python
Python中使用PDB库调试程序
Apr 05 Python
python开发之str.format()用法实例分析
Feb 22 Python
利用Python实现图书超期提醒
Aug 02 Python
Python闭包的两个注意事项(推荐)
Mar 20 Python
Python 高级专用类方法的实例详解
Sep 11 Python
python中WSGI是什么,Python应用WSGI详解
Nov 24 Python
Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)
Apr 18 Python
python 矢量数据转栅格数据代码实例
Sep 30 Python
python构建指数平滑预测模型示例
Nov 21 Python
PyTorch中的padding(边缘填充)操作方式
Jan 03 Python
Python中非常使用的6种基本变量的操作与技巧
Mar 22 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
DC动画很好看?新作烂得令人发指,名叫《红色之子》
2020/04/09 欧美动漫
PHP类的使用 实例代码讲解
2009/12/28 PHP
PHP多个图片压缩成ZIP的方法
2020/08/18 PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
2018/07/31 PHP
Laravel中正确地返回HTTP状态码方法示例
2019/09/10 PHP
js数组Array sort方法使用深入分析
2013/02/21 Javascript
js实现倒计时(距离结束还有)示例代码
2013/07/24 Javascript
关于Javascript 对象(object)的prototype
2014/05/09 Javascript
js光标定位文本框回车表单提交问题的解决方法
2015/05/11 Javascript
BootStrap的弹出框(Popover)支持鼠标移到弹出层上弹窗层不隐藏的原因及解决办法
2016/04/03 Javascript
JCrop+ajaxUpload 图像切割上传的实例代码
2016/07/20 Javascript
JavaScript中的this引用(推荐)
2016/08/05 Javascript
利用Angularjs和bootstrap实现购物车功能
2016/08/31 Javascript
Javascript中常见的逻辑题和解决方法
2016/09/17 Javascript
JavaScript中数组Array方法详解
2017/02/27 Javascript
Vue之Watcher源码解析(1)
2017/07/19 Javascript
jquery获取input输入框中的值
2019/11/13 jQuery
javascript设计模式 ? 桥接模式原理与应用实例分析
2020/04/13 Javascript
vue组件暴露和.js文件暴露接口操作
2020/08/11 Javascript
JavaScript实现雪花飘落效果
2020/12/27 Javascript
解决python 输出是省略号的问题
2018/04/19 Python
用Python将mysql数据导出成json的方法
2018/08/21 Python
python合并已经存在的sheet数据到新sheet的方法
2018/12/11 Python
DRF跨域后端解决之django-cors-headers的使用
2019/01/27 Python
基于Python2、Python3中reload()的不同用法介绍
2019/08/12 Python
python下载卫星云图合成gif的方法示例
2020/02/18 Python
如何写python的配置文件
2020/06/07 Python
python 常见的反爬虫策略
2020/09/27 Python
校园学雷锋活动月总结
2014/03/09 职场文书
小学优秀学生评语
2014/12/29 职场文书
2015年推普周活动总结
2015/03/27 职场文书
预备党员转正意见
2015/06/01 职场文书
银行求职信范文
2019/05/13 职场文书
2019年大学推荐信
2019/06/24 职场文书
JS异步堆栈追踪之为什么await胜过Promise
2021/04/28 Javascript
新手初学Java List 接口
2021/07/07 Java/Android