tornado(五)

tornado的輸入

  • 查詢字符串(query string),形如key1=value1&key2=value2;
  • 請求體(body)中發送的數據,好比表單數據、json、xml;
  • 提取uri的特定部分,如/blogs/2016/09/0001,能夠在服務器端的路由中用正則表達式截取;
  • 在http報文的頭(header)中增長自定義字段,如X-XSRFToken=itcast。

  1.獲取查詢字符串參數python

    get_query_argument(鍵名,default=默認值   ,strip=是否過濾兩邊空白字符,默認True)web

    get_query_arguments()同上。當一個鍵對應多個值時返回列表,上方法僅返回最後一個正則表達式

  2.獲取請求體參數django

    get_body_argument()      同上json

    get_body_arguments()    同上服務器

  說明

  對於請求體中的數據要求爲字符串,且格式爲表單編碼格式(與url中的請求字符串格式相同),即    key1=value1&key2=value2,HTTP報文頭Header中的"Content-Type"爲application/x-www-form-urlencoded 或 multipart/form-data。對於請求體數據爲json或xml的,沒法經過這兩個方法獲取。app

  3.以上兩類方法的整合tornado

    get_argument()           同上oop

    get_arguments()         同上post

  以上方法返回的都是unicode字符串

  4.關於請求的其餘信息

RequestHandler.request 對象存儲了關於請求的相關信息,具體屬性有:

    • method HTTP的請求方式,如GET或POST;
    • host 被請求的主機名;
    • uri 請求的完整資源標示,包括路徑和查詢字符串;
    • path 請求的路徑部分;
    • query 請求的查詢字符串部分;
    • version 使用的HTTP版本;
    • headers 請求的協議頭,是類字典型的對象,支持關鍵字索引的方式獲取特定協議頭信息,例如:request.headers["Content-Type"]
    • body 請求體數據;
    • remote_ip 客戶端的IP地址;
    • files 用戶上傳的文件,爲字典類型,型如:
      {
        "form_filename1":[<tornado.httputil.HTTPFile>, <tornado.httputil.HTTPFile>], "form_filename2":[<tornado.httputil.HTTPFile>,], ... } 
      tornado.httputil.HTTPFile是接收到的文件對象,它有三個屬性:
      • filename 文件的實際名字,與form_filename1不一樣,字典中的鍵名錶明的是表單對應項的名字;
      • body 文件的數據實體;
      • content_type 文件的類型。 這三個對象屬性能夠像字典同樣支持關鍵字索引,如request.files["form_filename1"][0]["body"]。

import tornado.web
import tornado.ioloop
import tornado.httpserver
import tornado.options
from tornado.options import options, define
from tornado.web import RequestHandler

define("port", default=8000, type=int, help="run server on the given port.")

class IndexHandler(RequestHandler):
    def get(self):
        self.write("hello itcast.")

class UploadHandler(RequestHandler): 
    def post(self):
        files = self.request.files
        img_files = files.get('img')
        if img_files:
            img_file = img_files[0]["body"]
            file = open("./itcast", 'w+')
            file.write(img_file)
            file.close()
        self.write("OK")

if __name__ == "__main__":
    tornado.options.parse_command_line()
    app = tornado.web.Application([
        (r"/", IndexHandler),
        (r"/upload", UploadHandler),
    ])
    http_server = tornado.httpserver.HTTPServer(app)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.current().start()

 

  5.tornado支持正則提取url中的參數

app = tornado.web.Application([
        (r"/", IndexHandler),
        (r"/sub-city/(.+)/([a-z]+)", SubjectCityHandler), # 無名方式
        (r"/sub-date/(?P<subject>.+)/(?P<date>\d+)", SubjectDateHandler), # 命名方式
    ])

    與django相似

相關文章
相關標籤/搜索