1. 程式人生 > 其它 >Python tornado 之 啟動服務與獲取引數(包括位址列引數和給定的引數)

Python tornado 之 啟動服務與獲取引數(包括位址列引數和給定的引數)

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