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的urllib库提交WEB表单
Feb 24 Python
Python常见文件操作的函数示例代码
Nov 15 Python
python 爬取微信文章
Jan 30 Python
Python中的错误和异常处理简单操作示例【try-except用法】
Jul 25 Python
Python实现一个Git日志统计分析的小工具
Dec 14 Python
django表单实现下拉框的示例讲解
May 29 Python
Ubuntu下升级 python3.7.1流程备忘(推荐)
Dec 10 Python
Python实现的爬取百度文库功能示例
Feb 16 Python
Python使用MyQR制作专属动态彩色二维码功能
Jun 04 Python
django 中使用DateTime常用的时间查询方式
Dec 03 Python
Django-xadmin后台导入json数据及后台显示信息图标和主题更改方式
Mar 11 Python
Python如何实现远程方法调用
Aug 07 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
php获取文件内容最后一行示例
2014/01/09 PHP
php实现监控varnish缓存服务器的状态
2014/12/30 PHP
php保存信息到当前Session的方法
2015/03/16 PHP
Ext第一周 史上最强学习笔记---GridPanel(基础篇)
2008/12/29 Javascript
javascript XMLHttpRequest对象全面剖析
2010/04/24 Javascript
jQuery 过滤not()与filter()实例代码
2012/05/10 Javascript
基于jquery实现的一个选择中国大学的弹框 (数据、步骤、代码)
2012/07/26 Javascript
理解javascript中的回调函数(callback)
2014/09/02 Javascript
JS实现为表格动态添加标题的方法
2015/03/31 Javascript
JavaScript焦点事件、鼠标事件和滚轮事件使用详解
2016/01/15 Javascript
基于slideout.js实现移动端侧边栏滑动特效
2016/11/28 Javascript
Js自动截取字符串长度,添加省略号(……)的实现方法
2017/03/06 Javascript
使用canvas及js简单生成验证码方法
2017/04/02 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
2017/05/11 Javascript
JavaScript正则表达式和级联效果
2017/09/14 Javascript
jQuery实现的滑块滑动导航效果示例
2018/06/04 jQuery
js实现内置计时器
2019/12/16 Javascript
JavaScript对象原型链原理详解
2020/02/05 Javascript
[46:48]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第三局
2016/02/25 DOTA
web.py 十分钟创建简易博客实现代码
2016/04/22 Python
搭建Python的Django框架环境并建立和运行第一个App的教程
2016/07/02 Python
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
2018/04/02 Python
浅谈pycharm出现卡顿的解决方法
2018/12/03 Python
python面向对象入门教程之从代码复用开始(一)
2018/12/11 Python
python解释器spython使用及原理解析
2019/08/24 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
2020/03/09 Python
python应用Axes3D绘图(批量梯度下降算法)
2020/03/25 Python
浅谈tensorflow 中的图片读取和裁剪方式
2020/06/30 Python
Jmeter HTTPS接口测试证书导入过程图解
2020/07/22 Python
详解HTML5 Canvas标签及基本使用
2020/01/10 HTML / CSS
this关键字的作用
2016/01/30 面试题
酒店经理职责
2014/01/30 职场文书
人事主管岗位职责
2015/02/04 职场文书
刑事附带民事起诉状
2015/05/19 职场文书
正规借条模板
2015/05/26 职场文书
Java详细解析==和equals的区别
2022/04/07 Java/Android