# 安装

pip insatll tornado

# 主文件 web_server.py

#!/usr/bin/env python
# encoding: utf-8 import tornado.httpserver
import tornado.options
import tornado.web
from tornado.options import define,options
import sys,os,re from apicode import Apicode # 具体自己业务用到的模块!! reload(sys)
sys.setdefaultencoding('utf-8') # 定义默认调用端口为8088
define("port",default=8088,help="run on the given port",type=int) # 验证码演示demo
class VcodeHandler(tornado.web.RequestHandler):
# get 请求
def get(self):
result = self.get_argument("result",{})
city = self.get_argument('city', u'重庆')
self.render("input_code.html", city=city, result=result) # post 请求
def post(self): result = {'code':0 , 'msg': 'success', 'result': ''} # 获取参数
city = self.get_argument('city', 'CQ')
method = self.get_argument('method', 'LR')
detail = eval(self.get_argument('detail', False))
imgUrl = self.get_argument('imgUrl', '')
imgFile = self.request.files.get('imgfile', [])
fname = '' # url 方式
if imgUrl and re.search('.+\.(jpg|png|bmp|gif)', imgUrl):
fname = './static/uploads/%s' % imgUrl.split('/')[-1]
result['result']= vcode.predict_url(city, imgUrl, detail, method) # 上传文件方式
elif imgFile:
for img in imgFile:
with open('./static/uploads/' + img['filename'], 'wb') as fw:
fw.write(img['body'])
fname = './static/uploads/' + img['filename']
result['result'] = vcode.predict(city, fname, detail, method)
else:
errorMsg = "上传验证码图片文件错误或url图片格式不正确"
result['code'] = '-1'
result['msg'] = errorMsg self.render("output_code.html", city=city, source=fname, detail=detail, method=method, result=result) # 验证码调用api
class VcodeApiHandler(tornado.web.RequestHandler): def get(self):
result = {'code': 1000 , 'msg': '调用参数错误, 请用post方式请求, city & imgfile 参数', 'result': '使用说明: http://gitlab.tangees.com/miaoweihong/verify-code'}
json_result = tornado.escape.json_encode(result)
self.write(json_result) def post(self): result = {'code': 0 , 'msg': 'success', 'result': ''}
city = self.get_argument('city', 'CQ')
method = self.get_argument('method', 'LR')
detail = eval(self.get_argument('detail', False)) imgFile = self.request.files.get('imgfile', [])
if imgFile:
for img in imgFile:
with open('./static/uploads/' + img['filename'], 'wb') as fw:
fw.write(img['body'])
fname = './static/uploads/' + img['filename']
try:
result['result'] = vcode.predict(city, fname, detail, method)
except Exception as e:
result['code'] = 1001
result['msg'] = '上传文件内容有误' + str(e)
else:
result['code'] = 1002
result['msg'] = '没有文件内容'
# 返回json结果
json_result = tornado.escape.json_encode(result)
self.write(json_result) class TestHandler(tornado.web.RequestHandler):
def get(self):
self.write('hello, jkmiao') if __name__ == "__main__": # 引入自行定义的模块
vcode = Apicode()
tornado.options.parse_command_line() app = tornado.web.Application(
handlers = [(r'/vcode',VcodeHandler), (r'/vcodeapi', VcodeApiHandler)], # url匹配
template_path = os.path.join(os.path.dirname(__file__),"templates"), # 定义视图页面地址,放 html文件
static_path = os.path.join(os.path.dirname(__file__), "static"), # 定义静态模板,放 css,js等文件
debug=True, # 是否为debug模式
autoescape=None, # 不设置转义字符
)
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
print "starting tornado at port http://127.0.0.1:%d" % options.port
tornado.ioloop.IOLoop.instance().start()

搞定!

教程

===============最基本  hello world ==================

代码清单:hello.py

import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web from tornado.options import define, options
define("port", default=, help="run on the given port", type=int) class IndexHandler(tornado.web.RequestHandler):
def get(self):
greeting = self.get_argument('greeting', 'Hello')
self.write(greeting + ', friendly user!') if __name__ == "__main__":
tornado.options.parse_command_line()
app = tornado.web.Application(handlers=[(r"/", IndexHandler)])
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()

tornado api 简单模板的更多相关文章

  1. Libvlc API 简单说明 [转]

    Libvlc API 简单说明 原文来自http://www.xuebuyuan.com/1519616.html libvlc_instance_t* libvlc_new(int argc, co ...

  2. tornado 学习笔记9 Tornado web 框架---模板(template)功能分析

            Tornado模板系统是将模板编译成Python代码.         最基本的使用方式: t = template.Template("<html>{{ myv ...

  3. vs 2013下自定义ASP.net MVC 5/Web API 2 模板(T4 视图模板/控制器模板)

    vs 2013下自定义ASP.net MVC 5/Web API 2  模板(T4 视图模板/控制器模板): Customizing ASP.NET MVC 5/Web API 2 Scaffoldi ...

  4. 再起航,我的学习笔记之JavaScript设计模式30(简单模板模式)

    简单模板模式 概念介绍 简单模板模式(Simple template): 通过格式化字符串拼凑出视图避免创建视图时大量节点操作,优化内存开销. 创建模板 在实际的业务中如果我们需要进行前后台交互,或多 ...

  5. salesforce零基础学习(八十五)streaming api 简单使用(接近实时获取你需要跟踪的数据的更新消息状态)

    Streaming API参考链接: https://trailhead.salesforce.com/en/modules/api_basics/units/api_basics_streaming ...

  6. 基于C语言libvirt API简单小程序

    libvirt API简单小程序 1.程序代码如下 #include<stdio.h> #include<libvirt/libvirt.h> int getDomainInf ...

  7. helm-chart-2-chart结构和简单模板

    1, chart 结构介绍 我们创建一个chart 并查看其结构 右侧注释为其文件的的解释 $ helm create mychart $ cd mychart/ $ tree ├── charts ...

  8. maven pom文件简单模板和配置详解

    https://blog.csdn.net/earbao/article/details/49924943 maven pom文件简单模板和配置详解

  9. day8学python 各种简单模板

    各种简单模板 内容: 1.shelve模板 存储数据 2.shutil 模板 用作拷贝/删除/压缩文件(使用便捷) 3.hashlib 模板 加密文件 4.re模板 ================= ...

随机推荐

  1. mongo链接solr的过程与问题

    我的环境: 1:ubunt 16 2:mongodb 2.6.1 3:solr 6.3 4:JDK 1.8 准备过程: 1:安装mongo-connector #pip install mongo-c ...

  2. jdbc mysql写入中文乱码解决

    一. 问题 数据库编码:utf8 mysql> create database dbnameDEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; ...

  3. Eclipse vs. IDEA快捷键对比大全

    原文链接: http://blog.csdn.net/dc_726 花了一天时间熟悉IDEA的各种操作,将各种快捷键都试了一下,感觉很是不错!于是就整理了一下我经常用的一些Eclipse快捷键与IDE ...

  4. Android之QQ登录界面

    首先过程中碰到的几个问题: 1.对 EditText 进行自定义背景 2.运行时自动 EditText 自动获得焦点 3.在获得焦点时即清空 hint ,而不是输入后清空 4.清空按钮的出现时机(在得 ...

  5. linux 下调试 汇编

    gcc: -c 编译后汇编,不连接 -S 编译后停止,不进行汇编 -o 编译,汇编,连接 -g 生成调试信息 -gstabs 标识符 main gdb break *标识符 :设置断点 info re ...

  6. java socket编程(网络编程)

    一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...

  7. MSXML使用教程

    在DOM接口规范中,有四个基本的接口:Document,Node,NodeList以及NamedNodeMap.在这四个基本接口中,Document接口是对文档进行操作的入口,它是从Node接口继承过 ...

  8. android 获取SD卡相关信息

    Object localOb; String str1 = null; try { localOb = new FileReader("/sys/block/mmcblk0/device/t ...

  9. Eclipse搭建SSH(Struts2+Spring+Hibernate)框架教程

    | 版权声明:本文为博主原创文章,未经博主允许不得转载. 前言 确实,刚创博客,对于这个陌生的东西还是有些许淡然.这是我的第一篇博文,希望能给你们有帮助,这就是我最大的乐趣! 好了下面进入正题: SS ...

  10. 在asp.net中显示PDF的方法:

    来源:http://www.cnblogs.com/tengs2000/archive/2009/02/23/1396646.html 一.直接显示,使用的还是原页面的URL Response.Con ...