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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM