Tornado网站的部署

Tornado实现聊天室的优化点
1.这个页面不可伸缩,只是个一直循环
2.并不能拉动页面条,查看页面上方的信息
3.登陆的用户没有固定的id,都是随机登录,登陆完之后就会退出
4.退出消息后并不能缓存下来消息,也就是消息没有保存到一个数据库中,并且没有登录用户之间的消息连接,每个用户都能够进入聊天室聊天

Tornado框架的网站部署

1.首先需要引入两个包
tornado.ioloop和tornada.web
然后编写一个类,该类继承自tornada.web.RequestHandler
2.然后在类中重新定义get方法,
get()函数一般只有一个参数self,该参数使用self.write()可以以硬编码的方法写入网页中
3.接着在这个类的外面编写个函数,该函数我们要把它赋值给app这个变量,这个变量可以使用listen()方法,该发放传入的是监听的端口号,也就是运行的url端口。
接着说这个函数,这函数会返回一个tornado.web.Application([])对象,该对象中的参数是一个列表,列表中的元素以元组为单位,元组的第一个参数是路由映射,第二个参数是处理是处理函数或者类
这里其实不编写类之外的函数也可以,直接把tornado.web.Application([])这个赋值给一个对象,这个中括号里面的参数还是元组,然后这个对象再用listen()函数监听端口号,并用这个端口号访问网站

4.运行tornado框架
直接使用如下语句

tornado.ioloop.IOLoop.current().start()

Tornado框架出名的就是它的异步和协程了

这些的特性使其能够处理高并发,大量的数据
异步化装饰器:
@tornado.web.asynchronous
该装饰器位置在一开始创建的类种的get函数上方,是用来修饰get函数的
协程化装饰器:
@tornado.gen.coroutine
使用较简单,但比异步慢一点

多参数路由

还记得我们在上面所编写的列表中的元素,是以元组为形式的,第一个参数是url后缀('/')表示无后缀,第一个参数也可以使用正则表达式,用来匹配各种各样的路由,第二个参数还是视图处理函数。就这样,一个列表,可以编写多个元组,也就有了多个url。

基础知识回顾

单文件基本运行结构

多文件的话可以参考django框架的配置

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler): # 继承的子类
    def get(self): # 请求业务函数
        self.write("杰克琼斯是男生的最爱")

def make_app(): # 应用配置
    return tornado.web.Application([
        (r"/", MainHandler), # 定义Url映射列表
    ])

if __name__ == "__main__":
    app = make_app() # 调用配置函数
    app.listen(8888) # 设置监听端口
    tornado.ioloop.IOLoop.current().start() # 启动服务器

tornado获取请求中的参数

3种参数,url中的参数,Get的参数,Post的参数

# -*- encoding:utf-8 -*-
import tornado.ioloop
import tornado.web

## 定义变量
html_txt = """  
<!DOCTYPE html>
<html>
    <body>
        <h2>收到GET请求</h2>
        <form method='post'>
        <input type='text' name='name' placeholder='请输入你的答案' />
        <input type='submit' value='发送POST请求' />
        </form>
    </body>
</html>
"""
# get请求 post请求
class zi(tornado.web.RequestHandler):
    def get(self): # 定义方法get()处理get
        self.write(html_txt)

    def post(self): # 定义方法post()处理post请求
        name = self.get_argument('name',default='匿名',strip=True) # 获取上面的表单姓名name,也就是你在get情况下输入的内容
        self.write("美特斯邦威的广告词是:%s" % name)

app = tornado.web.Application([
    (r'/get',zi),
    ],debug=True)

if __name__ == '__main__':
    app.listen(8888)
    tornado.ioloop.IOLoop.instance().start()


用正则来获取请求参数

import tornado.ioloop
import tornado.web
# url参数
class zi(tornado.web.RequestHandler):
    def get(self,uid): # 获取url参数
        # 打印uid,其源来自下方的正则
        self.write('顾客您好,杰克琼斯官方旗舰店欢迎您,你的UID号是:%s!' % uid)

app = tornado.web.Application([
    (r'/([0-9]+)',zi), # 第一个参数是个列表,列表中的第一个参数是url后缀
    ],debug=True)

if __name__ == '__main__':
    app.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

url转向

# -*- encoding:utf-8 -*-
import tornado.ioloop
import tornado.web
# url转向
class DistA(tornado.web.RequestHandler):
    def get(self): # 显示输出一个字符串
        self.write("被转向的目标页面!")

class SrcA(tornado.web.RequestHandler):
    def get(self): # url转向
        self.redirect('/dist')

app = tornado.web.Application([
    (r'/dist',DistA), # 指向DistA类
    (r'/src',SrcA), # 指向SrcA类,转向之后url变为dist
    # 以下转向过程是rdrt-->src-->dist 前两个状态码是301,302,后一个是200
    (r'/rdrt',tornado.web.RedirectHandler,{'url':'/src'}) # 定义一个转向url,没有编写函数
    ])

if __name__ == '__main__':
    app.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

使用静态资源

import tornado.ioloop
import tornado.web

### 使用静态资源文件
class AAA(tornado.web.RequestHandler):
    def get(self):
        self.write("杰克琼斯的最畅销款:")
        self.write("<img src='/static/ttt.jpg' />")

app = tornado.web.Application([
    (r'/stt',AAA),
    ],static_path='./static')  # static_path静态资源文件参数

if __name__ == '__main__':
    app.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

设置与获取cookie

# -*- encoding:utf-8 -*-
import tornado.ioloop
import tornado.web
import tornado.escape
# 在不同页面设置与获取cookie值


class aaaa(tornado.web.RequestHandler):
    def get(self):

        # URL编码处理
        self.set_cookie('odn_cookie',tornado.escape.url_escape("未加密COOKIE串"))
        # 设置普通cookie
        self.set_secure_cookie('scr_cookie',"加密SCURE_COOKIE串")
        # 设置加密cookie
        self.write("<a href='/shcook'>查看设置的COOKIE</a>")

# 定义处理类shcookHd1,用于获取cookie的值
class shcookHdl(tornado.web.RequestHandler):
    def get(self):
        # 获取普通cooki
        odn_cookie = tornado.escape.url_unescape(self.get_cookie('odn_cookie'))
        # 获取加密cookie,并用url解码
        scr_cookie = self.get_secure_cookie('scr_cookie').decode('utf-8')
        self.write("普通COOKIE:%s,<br/>安全COOKIE:%s" % (odn_cookie,scr_cookie))

app = tornado.web.Application([
    (r'/sscook',aaaa),
    (r'/shcook',shcookHdl),
    ],cookie_secret='abcddddkdk##$$34323sdDsdfdsf#23')

if __name__ == '__main__':
    app.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

posted @ 2021-10-08 19:43  索匣  阅读(123)  评论(1编辑  收藏  举报