摘要:接下來我們看看如果是請求,改怎么得到信息首先在之前的中添加下面內容用戶名密碼在中添加如下代碼顯示如下和的區別是就是獲取服務器數據的意思,是類似于提交數據,往服務器提交數據。
Tornado的輸入和輸出 1、輸入函數
在tornado文件夾下新建文件夾lesson2
在lesson2下新建start1.py寫入下列代碼
import tornado.httpserver import tornado.ioloop import tornado.options import tornado.web from tornado.options import define, options define("port", default=9000, help="run port", type=int) class TestIndexHandler(tornado.web.RequestHandler): def get(self): abc = self.get_argument("abc", "no") self.write("hello " + abc) self.write("
") abc = self.get_arguments("abc") print("the type of abc is %s" % type(abc)) print("the value of abc is %s" % abc) self.write(",".join(abc)) if __name__ == "__main__": tornado.options.parse_command_line() print(options.port) # 打印端口到terminal app = tornado.web.Application( handlers=[ (r"/test", TestIndexHandler), ] ) http_server = tornado.httpserver.HTTPServer(app) http_server.listen(options.port) tornado.ioloop.IOLoop.instance().start()
get_argument 函數獲取查詢字符串或者請求體中的信息
查詢字符串:就是在瀏覽器的地址欄看到的url中“?”后面的字符串
請求體:在POST請求中的body數據,比如表單數據form data、json數據、xml數據
函數原型:(返回具有給定名稱的參數的值。返回的值編碼始終是unicode)
RequestHandler.get_argument(*name*,*default = *,*strip = True *)
參數說明:
如果未提供default 值,則認為該參數是必需的,如果缺少該參數則拋出 MissingArgumentError異常。
如果參數多次出現在url中,我們返回最后一個值。
strip = True,默認為剪切字符串兩邊的空格
通過get_arguments 函數獲取查詢字符串或者請求體中的信息
函數原型:返回具有給定名稱的參數的值的列表。返回的值始終是unicode,如果參數不存在返回空列表
RequestHandler.get_arguments(name,*strip = True *)
除此之外,還有:
RequestHandler.get_query_argument(name,default =
在之前我們都是使用url來獲取字符串,通過URI來獲取參數的時候有兩種風格
#查詢字符串風格 http://127.0.0.1:8000/test?abc=weiwei #符合REST風格的url http://127.0.0.1:8000/user/weiwei/18
#當時使用REST風格的寫法時,路由映射的寫法: (r"/user/(.+)/([1-9]+)", UserHandler), #通過url名稱不固定的傳參 格式為 非零個非換行字符/非零個數字字符 (r"/bookname/(?P.+)/(?P [1-9]+)", BookNameHandler), #通過url傳固定名稱的參數,名字固定為name age #Handler的寫法 class UserHandler(tornado.web.RequestHandler): def get(self,name,age): self.write("---name=%s---age=%s"%(name,age)) class BookNameHandler(tornado.web.RequestHandler): def get(self, name, age): """通過url傳入參數名是固定的""" print(self.request.remote_ip) self.write("-----name=%s --------age=%s-----%s------"%(name, age, self.request.remote_ip))
瀏覽器顯示如下
函數原型:
RequestHandler.write(chunk)
將給定的塊寫入輸出緩沖區。
要將輸出寫入網絡,請使用下面的flush()方法
如果給定的塊是字典,我們將其寫為JSON,并將響應的Content-Type設置為application/json。(如果要發送JSON作為其他的Content-Type,調用write()后調用set_header )。
請注意,由于潛在的跨站點安全漏洞,列表不會轉換為JSON。所有JSON輸出都應該包裝在字典中。
(r"/write",WriteHandler), class WriteHandler(tornado.web.RequestHandler): def get(self): user = { "name":"budong", "age":18, } self.write(user) #wirte 回去的就是字符串 li = [1,2,3,4] import json li = json.dumps(li)# 轉成json self.write(li) print(repr(li),type(li)) li = json.loads(li) # 轉成python print(repr(li),type(li))
函數原型:
RequestHandler.render(template_name,kwargs)
返回html頁面,頁面中可以添加變量和函數。
#添加 (r"/html",HtmlHandler), template_path="templates", class HtmlHandler(tornado.web.RequestHandler): def get(self): self.render("hello.html") #html 的文件名 #templates 必須在一個lesson下面,一個文件夾下面,它自己是從起服務這個地方開始找的
在lesson2下新建一個子文件夾并命名為templates (千萬別寫成了 template 必須和template_path對應)
新建一個html文件命名為hello
html頁面如下:
Title hello
上面這些就是tornado的輸入和輸出,從前臺獲取數據,就是輸入,后臺把數據返回給前臺,就是輸出。
接下來我們看看如果是post請求,改怎么得到信息:
首先在之前的html中添加下面內容:
在HtmlHandler中添加如下代碼:
def post(self): name = self.get_argument("name","no") passwd = self.get_argument("password","no") st = "---name=%s---password=%s---"%(name,passwd) self.write(st)
顯示如下
get和post的區別是:get就是獲取服務器數據的意思,post是類似于提交數據,往服務器提交數據。
接下來我們看看,我們可以從前臺的請求中獲取些什么信息:
(r"/request",MyHandler), class MyHandler(tornado.web.RequestHandler): def get(self): print(self.request.remote_ip)
本文章總代碼
文件結構
start1.py
import tornado.httpserver import tornado.ioloop import tornado.options import tornado.web from tornado.options import define, options define("port", default=9000, help="run port", type=int) class TestIndexHandler(tornado.web.RequestHandler): def get(self): abc = self.get_argument("abc", "no") self.write("hello " + abc) self.write("
") abc = self.get_arguments("abc") print("the type of abc is %s" % type(abc)) print("the value of abc is %s" % abc) self.write(",".join(abc)) class UserHandler(tornado.web.RequestHandler): def get(self, name, age): self.write("---name=%s---age=%s" % (name, age)) class BookNameHandler(tornado.web.RequestHandler): def get(self, name, age): """通過url傳入參數名是固定的""" # print(self.request.remote_ip) # 得到請求主機的IP self.write("-----name=%s --------age=%s-----%s------" % (name, age, self.request.remote_ip)) class HtmlHandler(tornado.web.RequestHandler): def get(self): self.render("hello.html") # html 的文件名 def post(self): name = self.get_argument("name", "no") passwd = self.get_argument("password", "no") st = "---name=%s---password=%s---" % (name, passwd) self.write(st) class MyHandler(tornado.web.RequestHandler): def get(self): print(self.request.remote_ip) if __name__ == "__main__": tornado.options.parse_command_line() print(options.port) # 打印端口到terminal app = tornado.web.Application( handlers=[ (r"/test", TestIndexHandler), (r"/user/(.+)/([1-9]+)", UserHandler), (r"/bookname/(?P.+)/(?P [1-9]+)", BookNameHandler), (r"/html", HtmlHandler), (r"/request", MyHandler), ], template_path="templates", ) http_server = tornado.httpserver.HTTPServer(app) http_server.listen(options.port) tornado.ioloop.IOLoop.instance().start()
hello.py
Title hello
注:本文章使用的是 pycharm+VMware+ubuntu
tornado文件夾對應ubuntu用戶文件夾下的tonado_1文件夾
關于pycharm連接ubuntu的相關問題 詳情請見https://segmentfault.com/a/11...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44631.html
摘要:中常用的幾個框架有等,今天來總結一下和的不同。本文使用的環境是。文件可以加載路由信息和項目配置信息,文件負責啟動項目。以上就簡單的比較了和幾個方面的不同,它們各有優缺點,實際工作中可以根據不同的需求選擇不同的框架進行開發。 python中常用的幾個web框架有django, tornado, flask等,今天來總結一下django和tornado的不同。工作中django和torna...
摘要:簡介是使用編寫的一個強大的可擴展的服務器。是一個編寫對請求響應的框架。作為程序員,你的工作是編寫響應特定條件請求的響應的。注意不能序列化一個列表,但是字典是可以的。 1.Tornado簡介 tornado是使用Python編寫的一個強大的、可擴展的Web服務器。它在處理嚴峻的網絡流量時表現得足夠強健,但卻在創建和編寫時有著足夠的輕量級,并能夠被用在大量的應用和工具中。 tornado的...
閱讀 2565·2021-11-23 09:51
閱讀 3361·2021-11-22 15:22
閱讀 1873·2021-11-18 13:22
閱讀 2258·2021-09-24 09:48
閱讀 1312·2019-08-29 13:58
閱讀 1303·2019-08-26 13:39
閱讀 2448·2019-08-26 10:48
閱讀 3035·2019-08-26 10:21