• 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()
    
    
    努力拼搏吧,不要害怕,不要去规划,不要迷茫。但你一定要在路上一直的走下去,尽管可能停滞不前,但也要走。
  • 相关阅读:
    run C source file like a script
    shared_ptr注意点
    C++ #if #endif #define #ifdef #ifndef #if defined #if !defined详解 (转)
    linux切换g++
    std::forward_list
    有关typename
    win7下 mysql安装(mysql-5.7.18-winx64.zip)
    c++ 库函数返回的字符串指针是否需要手动释放
    c++ const char *[] or char [][]
    校园资源助手
  • 原文地址:https://www.cnblogs.com/wkhzwmr/p/15382547.html
Copyright © 2020-2023  润新知