tornado 02 輸出、輸入和URL傳參


tornado 02 輸出、輸入和URL傳參

一、輸出

  write輸出到頁面

#write可以接受的對象

#write() 可以接受3種對象:bytes  Unicode字符(二進制字符) 字典
#如果接收的是字典,會把字典轉化為json字符串,因此write也可以接收json字符串
#flush方法   緩沖區
#write會先把內容放到緩沖區,正常情況下,當請求處理完成(也就是整段函數結束后)的時候自動把緩沖區的內容輸出到瀏覽器
#但是調用flush方法就可以直接把緩沖區的內容輸出到瀏覽區,不用等待請求處理完成

class IndexHandler(tornado.web.RequestHandler):
    def get(self):
        self.write('dage') #字符串
        self.write('<br>')
        self.write(b'xuchengcheng')  #二進制
        self.write('<br>')
        self.flush() #如果有flush,文件就會把內容立即沖刷到瀏覽器當中去
        import time #導入time模塊
        time.sleep(3) #休息3秒鍾后沖刷,后面的內容就會在3S后沖刷出來
        di = {
            'name':'xuchengcheng',
            'age':'27'
        }
        self.write(di) #字典,當打印字典時候不會解析上面的br,同時排版改變了

        import json
        li=['xucc',18] #列表原來是不能被解析
        li=json.dumps(li)  #通過json把li轉變為json字符串,然后就可以被解析了
        self.write(li)

  輸出一個html頁面

#template_path='templates' 
#想要 Tornado 能夠正確的找到 html 文件,需要在 Application 中指定文件的位置

class TemHandler(tornado.web.RequestHandler):
    def get(self):
        self.render('lesson2.html') #通過  render  可以返回一個 html 文件
class TemHandler(tornado.web.RequestHandler):
    def get(self):
        self.render('lesson2.html') #通過render可以返回一個同級目錄文件夾下面的html文件

application = tornado.web.Application(
        handlers=[
            (r'/index',IndexHandler),
            (r'/tem',TemHandler)
        ],
        template_path = 'templates' #必須是在同級目錄,前面是固定的,后面的是自己定義的文件夾
    )

  跳轉路由

class RecHandler(tornado.web.RequestHandler):
    def get(self):
        self.redirect('/index') #打開rec路由會自動跳轉到index路由下面

application = tornado.web.Application(
        handlers=[
            (r'/index',IndexHandler),
            (r'/tem',TemHandler),
            (r'/rec',RecHandler),
        ],
        template_path = 'templates' 
    )

  finish

class IndexHandler(tornado.web.RequestHandler):
    def get(self):
        self.write('dage') 
        self.write('<br>')
        self.write(b'xuchengcheng')  
        self.write('<br>')
        self.flush() 
        import time 
        time.sleep(3) #
        di = {
            'name':'xuchengcheng',
            'age':'27'
        }
        self.write(di) 
        self.finish()  #當調用 finish 之后,請求處理完成,類似於函數中的 return (注意:請求當中不能出現return) ,其后不能再執行 write ,否則會報錯;但是后面的程序仍然是執行的,只是會報錯

        import json
        li=['xucc',18] 
        li=json.dumps(li)  
        self.write(li)

二、 獲取請求信息

class ReqHandler(tornado.web.RequestHandler):
    def get(self):
        self.write(self.request.remote_ip) #獲取virtualbox(也就是訪問人)的ip地址
        print(self.request) #可以獲取信息
        print(self.request.remote_ip) #客戶端的ip地址,返回值類型為字符串
        print(self.request.request_time()) #返回此請求執行所花費的時間
        print(self.request.full_url()) #重新構建此請求的完整URL
        print(self.request.uri) #請求的完整uri
        print(self.request.path) #路徑部分的uri
        print(self.request.query) #查詢部分的uri
        print(self.request.version) #請求中指定的HTTP版本,例如“HTTP/1.1”

  自動重啟服務

application = tornado.web.Application(
        handlers=[
            (r'/index',IndexHandler),
            (r'/tem',TemHandler),
            (r'/rec',RecHandler),
            (r'/req', ReqHandler),
        ],
        template_path = 'templates', 
        debug=True  #自動重啟服務(改完代碼之后不用重新打開python文件),方便平時調試用的,在工作的時候禁用
    )

三、輸入

class GetHandler(tornado.web.RequestHandler):
    def get(self): #獲取url數據
        name = self.get_argument('name','no')
        self.write(name)
        print(name)
        name = self.get_arguments('name') #返回值是一個列表
        print(name)
        print(self.get_query_argument('name','no')) #獲取地址欄的參數

    def post(self, *args, **kwargs): #獲取body數據
        name = self.get_argument('name','no')
        password = self.get_argument('password','no')
        self.write(name)
        self.write(password)
        print(self.get_body_argument('name','no')) #獲取form表單請求的內容,可以用get_arguments代替掉
#任何數據都可以用get_argument來獲取到

四、URL傳參

#REST風格傳參

class SubjectHandler(tornado.web.RequestHandler):
    def get(self,name,age): #下面的正則按照這里的位置來定義的
        self.write('name:%s<br> age:%s'%(name,age))

class UserHandler(tornado.web.RequestHandler):
    def get(self,age,name):
        self.write('name:%s<br> age:%s'%(name,age))


application = tornado.web.Application(
        handlers=[
            (r'/index',IndexHandler),
            (r'/tem',TemHandler),
            (r'/rec',RecHandler),
            (r'/req', ReqHandler),
            (r'/get', GetHandler),
            (r'/sub/(.+)/([0-9]+)', SubjectHandler), #用正則表達式(元字符+數字)
            (r'/user/(?P<name>.+)/(?P<age>[0-9]+)', UserHandler), #這樣就不是按照位置來傳參了,而是按照變量名來傳參了
        ],
        template_path = 'templates',
        debug=True  
    )
#查詢字符串
#查詢字符串通過在路由后面添加?再加上參數名和參數值來傳入參數 
#例子tem?name=xuchengcheng&name=lalala 的形式來傳參

#REST
#通過/來分割每個參數,關鍵在於get方法定義
#還有就是tem?name=xuchengcheng&name=lalala 的形式來傳參

 

 


免責聲明!

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



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