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连接mysql数据库示例(做增删改操作)
Dec 31 Python
Python+selenium实现截图图片并保存截取的图片
Jan 05 Python
Python处理文本换行符实例代码
Feb 03 Python
python try except返回异常的信息字符串代码实例
Aug 15 Python
Python基于Dlib的人脸识别系统的实现
Feb 26 Python
Python bytes string相互转换过程解析
Mar 05 Python
Pytorch转onnx、torchscript方式
May 25 Python
Python3.9新特性详解
Oct 10 Python
windows+vscode安装paddleOCR运行环境的步骤
Nov 11 Python
如何用Python提取10000份log中的产品信息
Jan 14 Python
Python3中对json格式数据的分析处理
Jan 28 Python
Python自动化之批量处理工作簿和工作表
Jun 03 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
使用sockets:从新闻组中获取文章(一)
2006/10/09 PHP
php使用json_encode对变量json编码
2014/04/07 PHP
调试PHP程序的多种方法介绍
2014/11/06 PHP
php判断表是否存在的方法
2015/06/18 PHP
Laravel框架搜索分页功能示例
2019/02/01 PHP
jquery解决图片路径不存在执行替换路径
2013/02/06 Javascript
在每个匹配元素的外部插入新元素的方法
2013/12/20 Javascript
8个超实用的jQuery功能代码分享
2015/01/08 Javascript
JavaScript声明变量名的语法规则
2015/07/10 Javascript
JavaScript 模块的循环加载实现方法
2015/12/13 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(一)
2016/02/16 Javascript
深入浅析JS Function()构造函数
2016/08/22 Javascript
vue组件父子间通信详解(三)
2017/11/07 Javascript
vue组件传递对象中实现单向绑定的示例
2018/02/28 Javascript
Javascript 编码约定(编码规范)
2018/03/11 Javascript
jQuery实现点击图标div循环放大缩小功能
2018/09/30 jQuery
Egg.js 中 AJax 上传文件获取参数的方法
2018/10/10 Javascript
如何用JavaScript实现功能齐全的单链表详解
2019/02/11 Javascript
关于AOP在JS中的实现与应用详解
2019/05/06 Javascript
Nodejs环境实现socket通信过程解析
2020/07/03 NodeJs
vue cli4.0项目引入typescript的方法
2020/07/17 Javascript
Element InputNumber 计数器的实现示例
2020/08/03 Javascript
python操作mongodb根据_id查询数据的实现方法
2015/05/20 Python
Python的时间模块datetime详解
2017/04/17 Python
Python Series从0开始索引的方法
2018/11/06 Python
Python ORM编程基础示例
2020/02/02 Python
Python的历史与优缺点整理
2020/05/26 Python
将pycharm配置为matlab或者spyder的用法说明
2020/06/08 Python
Python threading模块condition原理及运行流程详解
2020/10/05 Python
香港时尚女装购物网站:ZAFUL
2017/07/19 全球购物
NICKIS.com荷兰:设计师儿童时装
2020/01/08 全球购物
医学专业毕业生个人的求职信
2013/12/04 职场文书
高级销售求职信
2014/02/21 职场文书
2014报到证办理个人委托书
2014/10/08 职场文书
关于React Native 无法链接模拟器的问题
2021/06/21 Javascript
对象析构函数__del__在Python中何时使用
2022/03/22 Python