【tornado】7.request对象及tornado.httputil.HTTPFile对象

Request对象

request对象包括:
参数功能
methodHTTP请求方式
host被请求的主机
url请求的完整资源地址,包括路径和get查询参数部分
path请求路径部分
query请求的参数部分
versionHTTP的版本
headers请求的协议头,是个字典
body请求的体数据
remote_ip客户端的IP
files用户上传的文件,字典类型

打印一下这些信息:

增加questobject路由信息:
from views.index import IndexHandler,HomeHandler,QuestObjectHandler
import tornado.web
import config

class Application(tornado.web.Application):
    def __init__(self):
        handlers=[
            (r'/',IndexHandler),
            (r'/home',HomeHandler),
            (r'/questobject',QuestObjectHandler)
        ]
        super(Application,self).__init__(handlers,**config.settings)
编写questobject页面:
from tornado.web import RequestHandler
import templates
import config
import os

class IndexHandler(RequestHandler):
    def get(self):
        self.write("test:root page")

class HomeHandler(RequestHandler):
    def get(self):
        self.write("test:Home")

class QuestObjectHandler(RequestHandler):
    def get(self, *args, **kwargs):
        print(self.request.host)
        print(self.request.uri)
        print(self.request.path)
        print(self.request.query)
        print(self.request.version)
        print(self.request.headers)
        print(self.request.body)
        print(self.request.remote_ip)
        print(self.request.files)
        self.write("quest object test")

代码的内容是在服务器本地打印request的一些属性信息,然后在浏览器中显示:quest object test

运行结果:

在浏览器中输入:localhost:6578/questobject 后,浏览器显示:
在这里插入图片描述
然后在服务器端显示:
在这里插入图片描述



tornado.httputil.HTTPFile对象

这个对象是接收到的文件对象,浏览器每次上传一个文件就有一个这个对象
这个对象的属性有:

属性功能
filename文件的实际名字
body文件的数据实体
content-type文件的类型
浏览器上传文件

现在我们来尝试通过浏览器上传文件。

首先添加一下上传页面httpfile的路由信息:
from views.index import IndexHandler,HomeHandler,HttpFileHandler
import tornado.web
import config

class Application(tornado.web.Application):
    def __init__(self):
        handlers=[
            (r'/',IndexHandler),
            (r'/home',HomeHandler),
            (r'/httpfile',HttpFileHandler)
        ]
        super(Application,self).__init__(handlers,**config.settings)
然后写一下上传页面HttpFileHandler的代码:
from tornado.web import RequestHandler
import templates
import config
import os

class IndexHandler(RequestHandler):
    def get(self):
        self.write("test:root page")

class HomeHandler(RequestHandler):
    def get(self):
        self.write("test:Home")

class HttpFileHandler(RequestHandler):
    def get(self, *args, **kwargs):
        self.render("upfile.html")
    def post(self, *args, **kwargs):
        files=self.request.files
        print(files)
        self.write("your files have been successfully uploaded")
  • get方法向浏览器端显示了一个html页面"upfile.html"
  • post方法用于获得客户上传的文件,并在服务器端打印出上传文件的内容,最后在浏览器端显示信息:your files have been successfully uploaded

upfile.html的代码:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>upfile</title>
</head>
<body>
    <form method="post" action="/httpfile" enctype="multipart/form-data">
        <input type="file" name="file"/>
        <input type="file" name="file"/>
        <input type="file" name="img"/>
        <input type="submit" value="upload"/>
    </form>
</body>
</html>

运行结果:

在浏览器中输入:localhost:6578/upfile 然后上传2个文件test1.txt和test2.txt:
在这里插入图片描述
选择upload之后,浏览器显示为:
在这里插入图片描述
同时服务器本地显示为:
在这里插入图片描述
在这里插入图片描述
服务器终端显示的是files对象:
在这里插入图片描述
files对象是个字典,键是’file’,值是一个列表,列表里面是我们的上传的2个文件对象.
这两个文件对象都有3个属性:filename,body和contenttype



保存上传的文件

现在来尝试一下保存客户端上传的文件,我们直接修改httpfile页面类HttpFileHandler,将在服务器端显示上传文件内容的代码改为保存上传文件。

from tornado.web import RequestHandler
import templates
import config
import os

class IndexHandler(RequestHandler):
    def get(self):
        self.write("test:root page")

class HomeHandler(RequestHandler):
    def get(self):
        self.write("test:Home")

class HttpFileHandler(RequestHandler):
    def get(self, *args, **kwargs):
        self.render("upfile.html")
    def post(self, *args, **kwargs):
        files=self.request.files
        for key in files:
            filelist=files[key]
            for file in filelist:
                filepath=os.path.join(config.BASE_DIR,'upfile/'+file.filename)
                with open(filepath,'wb') as f:
                    f.write(file.body)
        self.write("your files have been uploaded successfully")

files:
在这里插入图片描述
files=self.request.files 是个字典,键是’file’,值是一个列表
filelist=files[key] 就是files的值,那个列表
file:是我们的文件,是个字典,包含filename,body和content-type三部分内容


运行结果:

在浏览器中输入: localhost:6578/httpfile
在这里插入图片描述

上传两个文件后:
在这里插入图片描述

同时服务器本地的upfile文件夹中新增加了2个文件test1.txt和test2.txt:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值