# 安装

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. [转]Linux 的多线程编程的高效开发经验

    Linux 平台上的多线程程序开发相对应其他平台(比如 Windows)的多线程 API 有一些细微和隐晦的差别.不注意这些 Linux 上的一些开发陷阱,常常会导致程序问题不穷,死锁不断.本文中我们 ...

  2. 细节小bug

    1. function devChange(value){ $("#multipleLeft").empty(); ReportRemote.getDeviceFlow(value ...

  3. android库站点

    图片加载库picasso:让本地图片.网络图片的加载变得如此简单. 引导页面的开源框架 guideshow自带小动画,但sdk要求18+ AppIntro界面很简约漂亮 circleindicator ...

  4. 页面无法加载main.css

    html应该用append,不是html,会覆盖掉文件

  5. android studio fetching android sdk component information

    解决办法: 1.找到Android Studio安装目录下的idea.properties文件 2.增加disable.android.first.run=true

  6. Android之AlertDialog应用

    Android 中的对话框 dialog 对话框对于应用是必不可少的一个组件,在Android中也不例外,用于提示重要信息... Android提供了丰富的对话框支持,它提供了4种常用的对话框形式: ...

  7. Ajax作用、及Ajax函数的编写

    关于Ajax 指的是异步 (Asynchronous JavaScript and XML) <异步的javascript和XML> 1. Ajax并非缩写词,而是由Jesse James ...

  8. 1.4 云计算的SPI服务模型

    云计算是通过共享资源池的方式来提高资源利用率的.在云计算中,根据其资源池中资源的类别,可以把云计算的服务模型分为三种,即所谓的SPI 模型   应用程序 Software as a Service ( ...

  9. while做法1.兔子生兔子 2.求100以内质数的和3.洗发水15元 牙膏5元 香皂2元 150元的算法

    1.兔子生兔子 2.求100以内质数的和 3.150块钱花完问题

  10. CGGeometry类定义几何元素的结构和操作几何元素的函数。

    1.数据类型: CGFloat: 浮点值的基本类型CGPoint: 表示一个二维坐标系中的点CGSize: 表示一个矩形的宽度和高度CGRect: 表示一个矩形的位置和大小 typedef float ...