zoukankan      html  css  js  c++  java
  • tornado输入-get_query_argument()等 笔记

    最外面的代码结构

    import tornado.web
    import tornado.ioloop
    import tornado.options
    import tornado.httpserver
    from tornado.options import options
    from tornado.web import RequestHandler
    
    # 使用tornado.options定义全局变量
    tornado.options.define('port', type=int, default=8000, help="服务器端口")
    
    class IndexHandler(RequestHandler):
        def get(self):
            self.write('OK')
    
    if __name__ == '__main__':
        options.parse_command_line()  # 转换命令行参数,并将其设置在全局变量上
        app = tornado.web.Application([
            (r'/', IndexHandler),
        ], debug=True)    # debug关联四个启动
        http_server = tornado.httpserver.HTTPServer(app)    # 监听套间字
        http_server.listen(options.port)  # 监听端口
        tornado.ioloop.IOLoop.current().start()    # 循环线程事件

    值得注意的是

    debug包含四个内容,分别是:原文件是否被改变/缓存模板是否要消除/静态文件的hash是否消除/和异常捕获,对应:autoreload/compiled_template_cache/static_hash_cache/serve_traceback

    get_query_argument()/get_query_arguments()/get_body_argument()/get_body_arguments()

    上述四个获取值方法统一参数:(name, default=_ARG_DEFAULT, strip=True)

    # name:获取name属性的值

    default:设置默认值,如果没有参数传递过来,那么就是用默认值

    strip: 去除左右空格

    # 使用get方式传递参数
        def get(self):
            # 获取单个键值
            get_a = self.get_query_argument('a')  # 如果同时传递多个a的参数,那么会采用后面覆盖前面的原则
            self.write(get_a)
            # 其中获取多个使用:get_query_arguments()
        # 使用post传递参数
        def post(self):
            # 接收单个参数
            post_a = self.get_body_argument('a')
            self.write(post_a)
            # 其中获取多个参数传递使用get_body_arguments()

    使用get_argument()/get_arguments()可以不区分post/get传递方式

    def post(self):
            # 接收单个参数
            post_a = self.get_argument('a')
            self.write(post_a)
            # 其中获取多个参数传递使用get_arguments()

    值得注意的是:使用上述方法获取参数只能够获取headers报头为"application/x-www-form-urlencoded"或者"multipart/form-data"的数据,如果想获取json或者xml方式传递的数据需要使用self.request方式获取

    def post(self):
            self.write(self.request.headers.get('Content-Type'))  # 获取“application/json”类型传递
            # 如果想获取内容,可以使用self.request.body

    上述代码结构还可以这样写

    import tornado.web
    import tornado.ioloop
    import tornado.options
    import tornado.httpserver
    from tornado.options import options
    from tornado.web import RequestHandler, url
    
    tornado.options.define('port', type=int, default=8000, help="服务器端口")
    
    class IndexHandler(RequestHandler):
        def get(self):
            self.write('<a href="' + self.reverse_url('numhref') +'">href</a>')
    
    class HrefUrl(RequestHandler):
        def initialize(self, new_url):
            self.new_url = new_url
        def get(self):
            # self.write(self.new_url)
            self.redirect(self.new_url)  # 自动跳转百度页面
    
    if __name__ == '__main__':
        options.parse_command_line()
        app = tornado.web.Application([
            (r'/', IndexHandler),
            url(r'/num', HrefUrl, {'new_url': 'http://www.baidu.com'}, name='numhref')  # 设置关键子参数和使用name
        ], debug=True)
        http_server = tornado.httpserver.HTTPServer(app)
        http_server.listen(options.port)
        tornado.ioloop.IOLoop.current().start()
  • 相关阅读:
    【笔记】求数据前n个主成分以及对高维数据映射为低维数据
    使用sklearn中的fetch_mldata的错误情况以及可能可行的解决方法
    【笔记】求数据的对应主成分PCA(第一主成分)
    【笔记】主成分分析法PCA的原理及计算
    【笔记】如何确定梯度计算的准确性以及调试梯度下降法
    【笔记】随机梯度下降法
    【笔记】线性回归中的梯度下降法(实现以及向量化并进行数据归一化)
    AttributeError: module 'numpy' has no attribute 'num'
    灵雀云CTO陈恺:从“鸿沟理论”看云原生,哪些技术能够跨越鸿沟?
    容器云在证券行业的探索与实践
  • 原文地址:https://www.cnblogs.com/namejr/p/10024045.html
Copyright © 2011-2022 走看看