Python tornado 之 啟動服務與獲取引數(包括位址列引數和給定的引數)
阿新 • • 發佈:2021-08-04
1、介紹
tornado是python的一個web服務框架,是一個非同步框架,是一個輕量級的框架。
2、安裝
python -m pip install tornado
3、第一個簡單的web專案
命名demo.py
import tornado.httpserver import tornado.ioloop import tornado.web from tornado.options import define from tornado.options import options class BaseHandler(tornado.web.RequestHandler):def get(self, *args, **kwargs): name = self.get_argument('name', '未傳入姓名', True) # 獲取前端引數name,未傳就是"未傳入姓名",去除前後空格 response = """<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>My Title</title> </head> <body> <h1>我是一級標題</h1> <h2>您好!{}!</h2> </body> </html>""".format(name) self.write(response) # 返回給前端 if __name__ == '__main__': define('port', default=8080, help='設定啟動服務的埠', type=int) # 定義埠, 可以全域性使用options.port獲取,可通過命令列更改 options.parse_command_line() # 分析命令列引數 application = tornado.web.Application(handlers=[('/', BaseHandler)]) # 設定路由server = tornado.httpserver.HTTPServer(application) server.listen(options.port) # 監聽埠8080,可以通過命令列改變,python xxx.py --port=8090 tornado.ioloop.IOLoop.instance().start() # 啟動web服務 """ # 上面的可以簡寫成這樣子 define('port', default=8080, help='設定啟動服務的埠', type=int) # 定義埠, 可以全域性使用options.port獲取,可通過命令列更改 options.parse_command_line() # 分析命令列引數 application = tornado.web.Application(handlers=[('/', BaseHandler)]) # 設定路由 application.listen(options.port) # 監聽埠8080,可以通過命令列改變,python xxx.py --port=8090 tornado.ioloop.IOLoop.current().start() # 啟動web服務 """
程式碼層面解析
定義一個類繼承RequestHandler,重寫get | post等方法,即訪問時,就執行對應請求的方法。即,如果前端訪問方式為GET,則執行的函式就是get,訪問方式是POST,則訪問的方法就是post(demo.py未寫post方法,未寫該請求方法時,使用post請求就會報出405)
執行
如果執行命令是 python3 demo.py
訪問http://127.0.0.1:8080/
訪問http://127.0.0.1:8080/?name=%E5%A2%A8%E7%8E%89%E9%BA%92%E9%BA%9F
可以執行python demo.py --port=8090 來更改埠號,這時候就訪問http://127.0.0.1:8090/ 即可
可以執行 python demo.py --help 來檢視幫助資訊
4、接收位址列引數
例如訪問http://127.0.0.1:8080/a/b 獲取a或者b作為引數
命名 demo.py
import tornado.ioloop import tornado.web from tornado.options import define from tornado.options import options class BaseHandler(tornado.web.RequestHandler): def get(self, first_argv): name = first_argv # 第一個匹配的路徑字串 response = """<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>My Title</title> </head> <body> <h1>我是一級標題</h1> <h2>您好!{}!</h2> </body> </html>""".format(name) self.write(response) class TestHandler(tornado.web.RequestHandler): def get(self): response = """<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>My Title</title> </head> <body> <h1>測試第二個路由</h1> </body> </html>""" self.write(response) if __name__ == '__main__': define('port', default=8080, help='設定啟動服務的埠', type=int) # 定義埠, 可以全域性使用options.port獲取,可通過命令列更改 options.parse_command_line() # 分析命令列引數 application = tornado.web.Application(handlers=[('/(\d+)', BaseHandler), ('/test', TestHandler)]) # 設定路由 """ ('/(\d+)', BaseHandler) 表示訪問"/"後面加一個或多個數字,可以匹配到BaseHandler 訪問 http://127.0.0.1:8080/ 會出現404,因為這裡是正則匹配,需要匹配"/"後面跟一個或多個數字 比如 http://127.0.0.1:8080/111 或 http://127.0.0.1:8080/888 括號中的匹配上的字串,會傳入給第一個引數 first_argv """ """ ('/test',TestHandler) 表示訪問"/test",可以訪問到TestHandler 訪問 http://127.0.0.1:8080/test """ application.listen(options.port) # 監聽埠8080,可以通過命令列改變,python xxx.py --port=8090 tornado.ioloop.IOLoop.current().start() # 啟動web服務
執行 python demo.py
訪問http://127.0.0.1:8080/ 出現 404 因為路由定義了需要後面加一個或多個數字
訪問http://127.0.0.1:8080/111
訪問http://127.0.0.1:8080/888
訪問http://127.0.0.1:8080/test
學習連結http://doc.iplaypy.com/tornado/ch1.html