Tornado----基础知识

1.Tornado简介

  Tornado是一种轻量级 Web 服务器软件的开源版本。
  Tornado 和主流Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。
  得利于其非阻塞的方式和对epoll的运用,Tornado 每秒可以处理数以千计的连接,因此 Tornado 是实时 Web 服务的一个 理想框架。

1.基础app文件

因为这是Python的一个第三方库,所以需要 pip 安装

from tornado import web, ioloop, httpserver


class UploadHandler(web.RequestHandler):
    def get(self, *args, **kwargs):
        self.render('upload.html')
        
        定义 get 方法,指定返回模板文件


class RegisterHandler(web.RequestHandler):
    def get(self, *args, **kwargs):
        self.render('register.html')

    def post(self, *args, **kwargs):
        username = self.get_argument('username')
        realname = self.get_argument('realname')
        
        通过前端关键字获取前端输入框内容
        进行前后端数据交互


settings = {'template_path': 'template',
            'static_path': 'static'}
   
        设置模板文件以及静态文件路径
         
application = web.Application([
        (r'/upload/', UploadHandler),
        (r'/register', RegisterHandler),
    ], **settings)
      
        定义路由并将setting配置引入
      
       
if __name__ == '__main__':
    http_server = httpserver.HTTPServer(application)
    http_server.listen(8888)
    ioloop.IOLoop.current().start()

        设置 8888 为默认端口号
        启动网站请求

前端表单

<body>
<h1>注册用户</h1>
<video width="300" height="200"></video>
<canvas width="300" height="200"></canvas>
<form action="/register" method="post">
    <p><input type="text" placeholder="请输入用户名" name="username"></p>
    <p><input type="text" placeholder="请输入真实姓名" name="realname"></p>
    <p><input type="submit" value="注册"></p>
</form>
</body>

2.文件上传

对路由及对应类名称进行相应修改,如上图 upload 路由
前端代码----upload.html

<body>
    <form action="/upload/" method="post" enctype="multipart/form-data">
        <input type="file" name="img1"/>
        <input type="submit" value="图片上传"/>
    </form>
</body>

后端接口

    def post(self, *args, **kwargs):
        # 获取文件/图片,为字典格式
        img1 = self.request.files.get('img1')

        for img in img1:
            body = img.get('body', '')
            content_type = img.get('content_type', '')
            filename = img.get('filename', '')

        # 设置文件路径,上传到本地 files 目录
        dir = os.path.join(os.getcwd(), 'files', filename)
        with open(dir, 'wb') as f:
            f.write(body)
            
        # 设置请求头为图片格式并使图片在浏览器显示
          不设置则显示乱码
          
        self.set_header('Content-Type', content_type)
        self.write(body)

如此则在本地写入上传文件
并且上传后返回到此文件页面

3.重定向

class IndexHandler(web.RequestHandler):
    def get(self, *args, **kwargs):
        self.redirect('http://www.baidu.com')
        
使用 redirect 方法实现
当然也可以自定义实现
        self.set_header('Location', 'http://www.4399.com')
        self.set_status(301)
        
        设置永久重定向,以后访问此路由都将跳转
        设置暂时重定向 302 ,建议设置 302,除非路由永久不变

4.路由逆向访问

视图如此定义

class IndexHandler(web.RequestHandler):
    def get(self, *args, **kwargs):
        self.redirect(self.reverse_url('test'))

        根据名称寻找路由

路由如此定义

application = web.Application([
    (r'/upload/', UploadHandler),
    URLSpec(r'/register', RegisterHandler, name='test'),
    (r'/l/', IndexHandler),
], **settings)

需导入 URLSpec ,流程如下
    先访问 l 路由,进入IndexHandler 视图,
    根据 name 逆向匹配路由 register 
    进入 RegisterHandler 视图

5.设置 Cookie

1.非加密方式

    self.set_cookie('name', 'li', expires_days=3)
       设置 cookie    key     value   存活时间

    self.get_cookie('name')
       获取 cookie
     
    在浏览器 Request中 可看到                 

2.加密方式

在 settings 里加入盐值

    'cookie_secret': 'abc'

设置和显示

    self.set_secure_cookie('name', 'li', expires_days=1)

    name = self.get_secure_cookie('name')
    self.write(name)
  
    在浏览器处能看到加密的 cookie
    直接获取的是密文, 如上获取明文
    

6.Django设置cookie和session

cookie 用户登录成功后设置和获取

response = HttpResponse('...') / redirect('...')  创建响应对象
response.set_cookie('name', 'li')

request.COOKIES.get('name')

session 简单

request.session['name']='li'
request.session.get('name')

7.Tornado异步服务器

通过装饰器, yield关键字挂起以及回调函数完成

8.Tornado异步客户端

回调函数完成
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值