Torando 起步

基本结构:

 1 from tornado.web import Application,RequestHandler
 2 from tornado.httpserver import HTTPServer
 3 from tornado.ioloop import IOLoop
 4
 5 class IndexHandler(RequestHandler):
 6     def get(self):
 7         self.write(‘Hello World‘)
 8     def post(self):
 9         pass
10
11 app = Application(handlers=[(‘/‘,IndexHandler)])
12 server = HTTPServer(app)
13 server.listen(8888)
14 IOLoop.current().start()

将端口号写到配置文件中

from tornado.options import define,parse_config_file,options

1. 定义端口号在配置文件中的名称,类型,默认值

 define(‘名称‘,type=int,default=8888)

2. 解析配置文件

parse_config_file(‘配置文件路径‘)

3. 读取配置文件中的内容

options.名称

URL支持正则表达式,利用路径的变化请求不同资源

用()来表示正则模板

   app = Application(handlers=[(‘/(day[0-9]+)‘,IndexHandler),(‘/java/(day[0-9]+)/(input[0-9]+)‘,JavaHandler)]

在view函数中可以接受正则匹配内容

    def get(self, day,input):
     self.write(‘Hello Python‘)      

利用参数请求不同资源 get

浏览器允许多个传参名相同:/python?day=1&day=2&day=3

 self.get_query_argument(name, default=_ARG_DEFAULT, strip=True)

返回 value

name : 参数名

default : 默认值,用户不提供参数不设置会报错。

strip : 去参数两端的空白字符,默认去除

如果参数不止一次出现在url中,则返回最后一个值

self.get_query_arguments(name, strip=True)

用户不提供参数会返回空列表

以列表类型返回传参中name的所有值

利用参数请求不同资源 post

     day = self.get_body_argument(‘day‘,default=‘0000000‘,strip=False)
   self.write(‘Hello Python‘+day)
   day = self.get_body_arguments(‘day‘,strip=False)
   print(day)

参数同上,在请求body中取值

其他

 get_argument() #等同get_query_argument +get_body_argument
 get_arguments() #同理

适用场景: 在post请求中,请求行中也有参数的情况

  示例:

    POST /python?day=1&day=2&day=3 http1.1

     header={}

    \r\n\r\n

     body={day:1,day:2,day:3}

from tornado.web import Application,RequestHandler
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from tornado.options import define,parse_config_file,options

class IndexHandler(RequestHandler):
  def get(self):
    self.write(‘<a href=/java>Hello World go java</a>‘)
    self.write(‘<br><a href=/python>Hello World go python</a>‘)
  def post(self):
    pass

class JavaHandler(RequestHandler):
  def get(self,day=None,input=None):
    self.write(‘Hello Java‘)
    if day:
      self.write(‘Hello ‘+day)
    if input:
      self.write(‘Hello ‘+input)
  def post(self):
    pass
   
class PythonHandler(RequestHandler):
  #覆盖RequestHandler get方法,响应get请求
  def get(self):
    self.write(‘Hello Python‘)
  #GET获取参数 http://127.0.0.1:9999/python?day=111111111
    day = self.get_query_argument(‘day‘,default=‘0000000‘,strip=False)
    self.write(‘Hello Python‘+day)
   #/python?day=1&day=2&day=3&day=4&day=5
    day = self.get_query_arguments(‘day‘,strip=False)
    print(day)#[1,2,3,4,5]
#覆盖RequestHandler post方法,响应post请求
  def post(self):
    day = self.get_body_argument(‘day‘,default=‘0000000‘,strip=False)
    self.write(‘Hello Python‘+day)
    day = self.get_body_arguments(‘day‘,strip=False)
    print(day)

define(‘port‘,type=int,default=8888)

parse_config_file(‘config/config.txt‘)

app = Application(handlers=[(‘/‘,IndexHandler),
(‘/java‘,JavaHandler),
(‘/java/([0-9]*)/([a-z0-9]*)‘,JavaHandler),
(‘/python‘,PythonHandler)])

server = HTTPServer(app)
server.listen(options.port)
IOLoop.current().start()

重定向

  为GET方式访问,支持参数的拼接传递

self.redirect(‘/python?day=1‘)

文件提交(表单要设置enctype=multipart/form-data)

 request 是 RequestHandler对象的一个属性,引用的HttpServerRequest对象

该对象封装了与请求相关的所有内容print(self.request)  , 其files属性引用着用户通过表单上传的文件,{} 结构

#结构示例 self.request.files={‘input_name1‘:[{‘content_type‘:‘image/jpeg‘, #文件类型
                                                            ‘body‘:b‘\....‘, #文件二进制内容
                                                            ‘filename‘:‘文件1名‘ #原文件名
                                                            },{文件2},{文件3},,,,],
                                 ‘input_name2‘:,,,,,,,,,,,,,,,}

#input_name为文件类型表单控件名称,其值为此表单提交的文件列表,列表元素为字典,一个字典包含一个文件对象的全部属性

文件保存

 img = self.request.files[‘input_name1‘]
    for a in img:
        content_type = a[‘content_type‘]
        filename = a[‘filename‘]
        body = a[‘body‘]
        with open(path+filename,‘wb‘) as f:
            f.write(body)

原文地址:https://www.cnblogs.com/yanhuazidi/p/10336494.html

时间: 2024-10-11 08:26:58

Torando 起步的相关文章

jquery 插件 起步代码

/** * Created by W.J.Chang on 2014/6/25. */ ;(function($) { var methods= { check: function() { return this.each(function() { this.checked = true; }); } }; $.fn.pager = function(method) { if ( methods[method] ) { return methods[ method ].apply( this,

Android Camera探究之路——起步

Android Camera探究之路--起步 Camera在手机中有着举足轻重的地位,无论是二维码还是照片.识别.都离不开摄像头,本文将对Android中的Camera进行全面解析. 权限镇楼: <uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE&

看了这三个问题,你就知道UX设计师如何起步

如何成为一个合格的UX设计师,怎样才能从菜鸟转变为设计高手,每天都有无数的设计师思考着同样的问题.凡事要做好,必须得回答这三个问题:做什么?怎么做?用什么做?看了这三个方面的问题,你就应该能够明白如何起步了.为此,笔者收集了一些资源并且做了归纳,希望对你可以有所帮助. 一.做什么? 既然是一名UX设计师,那么首先,你要知道什么是UX,以及UX和其它岗位的区别. The Difference Between UX and UI Design-A Layman's Guide 这篇文章中主要讲解了U

Pro Git 转载 - 1.1 起步 - 关于版本控制

转载序: 最近单位开始用Git,网上虽然有各资料,然而大多顾此失彼. 这是git官网上找到的书 http://git-scm.com/book,显然不是速成资料.如需快速上手,原作推荐第二章. 版权: The entire Pro Git book, written by Scott Chacon and Ben Straub and published by Apress, is available here. All content is licensed under the Creativ

【转】Git详解之一:Git起步

原文网址:http://blog.jobbole.com/25775/ 原文:<Pro Git> 起步 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后试着让 Git 在你的系统上跑起来,直到最后配置好,可以正常开始开发工作.读完本章,你就会明白为什么 Git 会如此流行,为什么你应该立即开始使用它.(查看Git详解系列的全部文章) 1.1 关于版本控制 什么是版本控制?我真的需要吗?版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统.在

【转】1.5 起步 - 初次运行 Git 前的配置

原文网址:http://git-scm.com/book/zh/v1/%E8%B5%B7%E6%AD%A5-%E5%88%9D%E6%AC%A1%E8%BF%90%E8%A1%8C-Git-%E5%89%8D%E7%9A%84%E9%85%8D%E7%BD%AE 1.5 起步 - 初次运行 Git 前的配置 初次运行 Git 前的配置 一般在新的系统上,我们都需要先配置下自己的 Git 工作环境.配置工作只需一次,以后升级时还会沿用现在的配置.当然,如果需要,你随时可以用相同的命令修改已有的配置

面向对象设计——“泛型”的起步

泛型是 2.0 版 C# 语言和公共语言运行库 (CLR) 中的一个新功能.泛型将类型参数的概念引入 .NET Framework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的指定推迟到客户端代码声明并实例化该类或方法的时候.例如,通过使用泛型类型参数 T,您可以编写其他客户端代码能够使用的单个类,而不致引入运行时强制转换或装箱操作的成本或风险. --MSDN 我的计算机是以Visual Basic 6.0拉开帷幕的,让我印象比较深的是两个排序:选择排序和冒泡排序.当然本

GitHub起步---创建第一个项目

---恢复内容开始--- 刚起步学习GitHub,边学边说! {参考教程:http://blog.csdn.net/steven6977/article/details/10567719}这里描述的很详细 [第一步]注册账户 1.这个步骤你已经玩过很多遍了,在网上创建个什么账户一样的.可以在网上看到注册教程 [第二步]建立代码仓库 1.点击界面上右上角的 2.添加详细信息:仓库名-->描述等信息 Initialize this repository with a README是可选的,不过本人建

VMware: linux起步提示 memory for crashkernel(0*0 to 0*0)not within permissible

(virtualbox/VMware)linux起步提示memoryforcrashkernel(0*0 to 0*0)notwithinpermissible  http://www.myexception.cn/linux-unix/477672.html 一.在vmware上创建了虚拟机,操作系统是Red Hat Enterprise Linux Server release 5.3,当启动虚拟机时出现下面信息: Memory for crash kernel (0x0 to 0x0) n