RequestHandler

from tornado.web import ReuqestHandler

一、利用HTTP协议想服务器传递参数

  • 提取url的特定部分

  • get方式传递参数
    • http://127.0.0.1:8000/qzk/?name=qzk&age=18
    • self.get_query_argument(name,default=ARG_DEFAULT,strip=True)
    • 参数:
      • name:从get请求参数字符串中返回指定参数的值,如果穿线过同名参数,则返回最后一个
      • default:设置为未传的name参数是返回默认的值,如果default也没有设置,会抛出异常 tornado.web.MissingArgumentError
      • strip:表示是否过滤掉左右两边的空白字符,默认为True
    • self.get_query_arguments(name,strip=True)
  • post方式传递参数
    • http://127.0.0.1:8000/userinfo
    • self.get_body_argument(name,default=ARG_DEFAULT,strip=True)
    • 参数:
      • name:从get请求参数字符串中返回指定参数的值,如果穿线过同名参数,则返回最后一个
      • default:设置为未传的name参数是返回默认的值,如果default也没有设置,会抛出异常 tornado.web.MissingArgumentError
      • strip:表示是否过滤掉左右两边的空白字符,默认为True
    • self.get_body_arguments(name,strip=True)
  • 既可以获取get请求,也可以获取post请求
    • self.get_argument(name,default=ARG_DEFAULT,strip=True)
    • self.get_arguments((name,strip=True)
    • 注意:一般我们不太会用该方法,因为不太容易区分get/post
  • 在http报文的头中增加自定义的字段

二、request对象

  • 作用:存储关于请求的相关信息
  • 属性:
    • method:HTTP请求的方式
    • host:被请求的主机名
    • uri:请求的完整资源地址,包括路径和get查询参数的部分
    • path:请求的路径部分
    • query:请求的参数部分
    • version:使用的http版本
    • headers:请求的协议头,是一个字典类型
    • body:请求体数据
    • remote_ip:客户端的ip
    • files:用户上传的文件,字典类型

三、tornado.httputil.HTTPFile对象

  • 作用:接收到的文件对象
  • 属性:
    • filename:文件的实际名字
    • body:文件的数据实体
    • content_type:文件的类型
  • 示例:
"""url-application"""
# -*- coding: utf-8 -*- import tornado.web from views import index
import config class Application(tornado.web.Application):
def __init__(self):
handlers = [
(r'/uploadfiles', index.UploadFilesHandler),
]
super(Application, self).__init__(handlers, **config.settings)
import os
import config class UploadFilesHandler(RequestHandler):
def get(self, *args, **kwargs):
self.render('upload.html') def post(self, *args, **kwargs):
fileDict = self.request.files
print(fileDict)
for inputname in fileDict:
filelist = fileDict[inputname]
for file_obj in filelist:
filePath = os.path.join(config.BASE_DIR, 'media/' + file_obj.filename)
with open(filePath, 'wb') as f:
f.write(file_obj.body)
self.write('ok')
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>upload</title>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
<form action="/uploadfiles" method="post" enctype="multipart/form-data">
<br>
<input type="file" name="file">
<br>
<input type="file" name="file">
<br>
<input type="file" name="img">
<br>
<!--<input type="image" name="image">-->
<button class="btn btn-danger" >提交</button>
</form>
</body>
</html>

打印结果:

{
'file': [
{
'filename': 'a.txt',
'body': b'qwe',
'content_type': 'text/plain'
},
{
'filename': 'b.txt',
'body': b'asd',
'content_type': 'text/plain'
}
],
'img':[
{
'filename':'b2.png',
'body':b'...',
'content_type':'image/png'
}
]
}

tornado 之 RequestHandler(请求)的更多相关文章

  1. tornado异步web请求

    1.为什么要使用异步web服务使用异步非阻塞请求,并发处理更高效. 2.同步与异步请求比较同步请求时,web服务器进程是阻塞的,也就是说当一个请求被处理时,服务器进程会被挂起直至请求完成. 异步请求时 ...

  2. 使用Tornado实现Ajax请求

    Ajax,指的是网页异步刷新,一般的实现均为js代码向server发POST请求,然后将收到的结果返回在页面上.   这里我编写一个简单的页面,ajax.html <html> <h ...

  3. [转]Tornado get/post请求异步处理框架分析

    转自: http://m.blog.csdn.net/blog/joeyon/41956027 首先说下环境,python2.7,Tornado3.0 然后本文讨论的不是Tornado底层如何用epo ...

  4. tornado框架设置

    路由 import tornado.ioloop #开启循环 让服务器一直等待请求的到来 import tornado.web #框架基本功能封装在此模块 #例子 class MainHendler( ...

  5. Python+Tornado开发微信公众号

    本文已同步到专业技术网站 www.sufaith.com, 该网站专注于前后端开发技术与经验分享, 包含Web开发.Nodejs.Python.Linux.IT资讯等板块. 本教程针对的是已掌握Pyt ...

  6. Torando 入门

    1. 前言 Tornado 是使用 Python 编写的一个强大的.可拓展性的 Web 服务器/框架.与其他主流 Web 服务器框架有着明显区别:Tornado 支持异步非阻塞框架.同时它处理速度非常 ...

  7. Python框架之Tornado(三)请求

    概述 本篇就来详细介绍tornado服务器(socket服务端)是如何接收用户请求数据以及如果根据用户请求的URL处理并返回数据,也就是上图的3 系列所有步骤,如上图[start]是一个死循环,其中利 ...

  8. Python框架之Tornado(二)请求阶段

    概述 上图是tornado程序启动以及接收到客户端请求后的整个过程,对于整个过程可以分为两大部分: 启动程序阶段,又称为待请求阶段(上图1.2所有系列和3.0) 接收并处理客户端请求阶段(上图3系列) ...

  9. 第三篇:白话tornado源码之请求来了

    上一篇<白话tornado源码之待请求阶段>中介绍了tornado框架在客户端请求之前所做的准备(下图1.2部分),本质上就是创建了一个socket服务端,并进行了IP和端口的绑定,但是未 ...

随机推荐

  1. 使用 wx.miniProgram.postMessage 传递网站数据来分享网站程序页面

    在小程序里使用web-view组件,在对小程序点击顶部分享按钮分享时,分享的内容为当前页面的内容,需要使用wx.miniProgram.postMessage来进行处理 H5页面代码 created( ...

  2. 2019 Multi-University Training Contest 1 String(序列自动机+贪心)

    题意 链接:https://vjudge.net/problem/HDU-6586 给你一个字符串和k,还有每个字符出现次数的限制,求一个长度为k的字典序最小的满足限制的子序列. 思路 先构造出序列自 ...

  3. adb的常见命令和异常报错操作

    adb连接状态 adb devices , 获取设备列表及设备状态 设备的状态有 3 种 device , 设备连接正常 offline , 设备离线,连接出现异常 unauthorized 设备为进 ...

  4. HTML与CSS学习笔记(7)

    1.响应式布局 利用媒体查询,即media queries,可以针对不同的媒体类型定义不同的样式,从而实现响应式布局. 常见选项: 媒体类型 and.not min-width.max-width: ...

  5. pointcnn

    这篇论文先举例子解释了为什么卷积无法直接应用在点云数据上. 如图1, 传统的卷积是作用在2维图像数据上.图像中每个像素的顺序是固定的,也就是说数据是结构化存储的.直接使用conv2d就能从这种潜在的空 ...

  6. [日常] NOI2019 退役记

    这次要彻底退役了 开个坑先 Day -2 出发坐车去gz 好像和上次去雅礼的车是同一趟于是大家都以为和上次一样是 \(10:40\) 开车, 于是提前2h大概八点多就去坐公交了 到了之后取票, 发现票 ...

  7. MySQL实战45讲学习笔记:第四十五讲

    一.本节概述 MySQL 里有很多自增的 id,每个自增 id 都是定义了初始值,然后不停地往上加步长.虽然自然数是没有上限的,但是在计算机里,只要定义了表示这个数的字节长度,那它就有上限.比如,无符 ...

  8. OI回忆录——梦开始的地方

    前言 谨以此文,纪念和整理我在OI之路上的奔波历程. 或许,等到或早或晚都要来临的退役真正来临时,再写回忆录,就晚了,那么,趁现在,自信还在,青春犹存,整理一下我慢慢的OI路吧. 我真正开始接触OI是 ...

  9. (三十九)golang--反序列化

    反序列化:是指将json字符串反序列化成原来的数据类型. import ( "encoding/json" "fmt" ) type monster struc ...

  10. JMS简介与入门

    1:JMS引入 如果手机只能进行实时通话,没有留言和短信功能会怎么样?一个电话打过来,正好没有来得及接上,那么这个电话要传递的信息肯定就收不到了.为什么不能先将信息存下来,当用户需要查看信息的时候再去 ...