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版的文曲星猜数字游戏代码
Sep 02 Python
python解析xml文件实例分享
Dec 04 Python
python 七种邮件内容发送方法实例
Apr 22 Python
Python实现大文件排序的方法
Jul 10 Python
Python多层嵌套list的递归处理方法(推荐)
Jun 08 Python
使用Python获取并处理IP的类型及格式方法
Nov 01 Python
浅析python3字符串格式化format()函数的简单用法
Dec 07 Python
详解Python3 中的字符串格式化语法
Jan 15 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
Apr 27 Python
Python获取浏览器窗口句柄过程解析
Jul 25 Python
python asyncio 协程库的使用
Jan 21 Python
Python项目实战之使用Django框架实现支付宝付款功能
Feb 23 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控制用户的浏览器--ob*函数的使用说明
2007/03/16 PHP
PHP 中英文混合排版中处理字符串常用的函数
2007/04/12 PHP
php禁止直接从浏览器输入地址访问.php文件的方法
2014/11/04 PHP
thinkPHP中分页用法实例分析
2015/12/26 PHP
详解Window7 下开发php扩展
2015/12/31 PHP
php nginx 实时输出的简单实现方法
2018/01/21 PHP
js 获取计算后的样式写法及注意事项
2013/02/25 Javascript
JavaScript通过元素的ID和name设置样式
2014/07/08 Javascript
JS设置cookie、读取cookie、删除cookie
2015/04/17 Javascript
浅谈jquery.fn.extend与jquery.extend区别
2015/07/13 Javascript
javascript中获取元素标签中间的内容的实现方法
2016/10/08 Javascript
基于JavaScript实现复选框的全选和取消全选
2017/02/09 Javascript
ES6中Proxy代理用法实例浅析
2017/04/06 Javascript
react实现菜单权限控制的方法
2017/12/11 Javascript
js登录滑动验证的实现(不滑动无法登陆)
2018/01/03 Javascript
Javascript 之封装(Package)
2018/09/14 Javascript
浅谈关于vue中scss公用的解决方案
2019/12/02 Javascript
浅谈vuex为什么不建议在action中修改state
2020/02/02 Javascript
详解JavaScript作用域 闭包
2020/07/29 Javascript
JS时间戳与日期格式互相转换的简单方法示例
2021/01/30 Javascript
[58:32]EG vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[04:54]DOTA2-DPC中国联赛1月31日Recap集锦
2021/03/11 DOTA
python3爬虫获取html内容及各属性值的方法
2018/12/17 Python
python实现QQ空间自动点赞功能
2019/04/09 Python
Django框架模型简单介绍与使用分析
2019/07/18 Python
python各类经纬度转换的实例代码
2019/08/08 Python
Python高级特性之闭包与装饰器实例详解
2019/11/19 Python
基于Django signals 信号作用及用法详解
2020/03/28 Python
python反扒机制的5种解决方法
2021/02/06 Python
英国川宁茶官方网站:Twinings茶
2019/05/21 全球购物
XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
2016/01/12 面试题
工作自荐信
2013/12/11 职场文书
岗位说明书范文
2014/05/07 职场文书
python实现自定义日志的具体方法
2021/05/28 Python
只用20行Python代码实现屏幕录制功能
2021/06/02 Python
JS数组去重详情
2021/11/07 Javascript