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避免死锁方法实例分析
Jun 04 Python
python实现的简单RPG游戏流程实例
Jun 28 Python
python选择排序算法实例总结
Jul 01 Python
python检查字符串是否是正确ISBN的方法
Jul 11 Python
浅谈终端直接执行py文件,不需要python命令
Jan 23 Python
用python处理图片之打开\显示\保存图像的方法
May 04 Python
python调用OpenCV实现人脸识别功能
May 25 Python
对django中render()与render_to_response()的区别详解
Oct 16 Python
python设置环境变量的原因和方法
Jun 24 Python
python把转列表为集合的方法
Jun 28 Python
Python 获取指定文件夹下的目录和文件的实现
Aug 30 Python
Python异常原理及异常捕捉实现过程解析
Mar 25 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
PHILIPS D1835/D1875的电路分析与打理
2021/03/02 无线电
解析php获取字符串的编码格式的方法(函数)
2013/06/21 PHP
php similar_text()函数的定义和用法
2016/05/12 PHP
PHP页面跳转操作实例分析(header方法)
2016/09/28 PHP
PHP获取MySQL执行sql语句的查询时间方法
2018/08/21 PHP
jQuery布局插件UI Layout简介及使用方法
2013/04/03 Javascript
js判断60秒以及倒计时示例代码
2014/01/24 Javascript
js实现文本框只允许输入数字并限制数字大小的方法
2015/08/19 Javascript
使用JQuery在线制作ppt并在线演示源码特效
2015/09/08 Javascript
jquery实现仿新浪微博带动画效果弹出层代码(可关闭、可拖动)
2015/10/12 Javascript
jquery属性,遍历,HTML操作方法详解
2016/09/17 Javascript
Vue实现双向数据绑定
2017/05/03 Javascript
Vue2 配置 Axios api 接口调用文件的方法
2017/11/13 Javascript
原生JS实现网页手机音乐播放器 歌词同步播放的示例
2018/02/02 Javascript
用jQuery将JavaScript对象转换为querystring查询字符串的方法
2018/11/12 jQuery
Python设计模式之单例模式实例
2014/04/26 Python
tensorflow: variable的值与variable.read_value()的值区别详解
2018/07/30 Python
python 地图经纬度转换、纠偏的实例代码
2018/08/06 Python
python得到windows自启动列表的方法
2018/10/14 Python
python调用pyaudio使用麦克风录制wav声音文件的教程
2019/06/26 Python
Django实现网页分页功能
2019/10/31 Python
Django框架序列化与反序列化操作详解
2019/11/01 Python
屏蔽Django admin界面添加按钮的操作
2020/03/11 Python
Python基于进程池实现多进程过程解析
2020/04/30 Python
Python 私有属性和私有方法应用场景分析
2020/06/19 Python
html5理解head_动力节点Java学院整理
2017/07/13 HTML / CSS
寄语十八大感言
2014/02/07 职场文书
保护环境倡议书100字
2014/05/19 职场文书
艺术设计专业求职自荐信
2014/05/19 职场文书
食品安全承诺书
2014/05/22 职场文书
优秀学生党员先进事迹材料
2014/05/29 职场文书
信仰心得体会
2014/09/05 职场文书
一份关于丢失公司财物的检讨书
2014/09/19 职场文书
机关作风整顿个人剖析材料
2014/10/06 职场文书
个人批评与自我批评总结
2014/10/17 职场文书
幼儿园个人总结
2015/02/28 职场文书