tornado中的url配置

1:如何實現url中帶數字(字符串)類型的匹配?

class PeopleIdHandler(web.RequestHandler):
    async def get(self, id, *args, **kwargs):
        self.write("用戶ID:{}".format(id))


class PeopleNameHandler(web.RequestHandler):
    async def get(self, name, *args, **kwargs):
        self.write("用戶姓名:{}".format(name))


class PeopleInfoHandler(web.RequestHandler):
    async def get(self, name, age, gender, *args, **kwargs):
        self.write("用戶姓名:{},用戶年齡:{},用戶性別:{},".format(name, age, gender))
……

urls = [
    # 匹配數字類型
    ("/people/(\d+)/", PeopleIdHandler),
    # 匹配字符串類型
    ("/people/(\w+)/", PeopleNameHandler),
    # 更豐富的匹配結合正則去實現……
    ("/people/(\w+)/(\d+)/(\w+)/", PeopleInfoHandler)

]

……




2:地址中有斜槓結尾和沒斜槓結尾,訪問會出現有成功和失敗的情況?

url中 用戶沒輸入斜槓時,程序自動補全,在url配置中最後加上/?即可

urls = [
    ("/people/(\d+)/?", PeopleIdHandler),
    ("/people/(\w+)/?", PeopleNameHandler),
    ("/people/(\w+)/(\d+)/(\w+)/?", PeopleInfoHandler)

]

3:在url中配置一個名稱,在程序的執行邏輯中使用該名稱實現一些操作

class PeopleIdHandler(web.RequestHandler):
    async def get(self, id, *args, **kwargs):
        # 實現跳轉到/people/name的頁面
        # reverse_url後傳遞參數的個數 根據url配置裏的設定變動
        self.redirect(self.reverse_url("people_name", "bobby"))

……
urls = [
    tornado.web.URLSpec("/people/(\d+)/?", PeopleIdHandler, name="people_id"),
    tornado.web.URLSpec("/people/(\w+)/?", PeopleNameHandler, name="people_name"),
    tornado.web.URLSpec("/people/(\w+)/(\d+)/(\w+)/?", PeopleInfoHandler, name="people_info"),
    
]

4:在url中傳遞給handler一些初始化的參數

people_db = {"name":"people_db"}

# 如不同的業務使用的數據庫不同時 
urls = [
    tornado.web.URLSpec("/people/(\d+)/?", PeopleIdHandler, people_db, name="people_id"),
    
]

# 在handler中獲取到傳遞進來的值,在哪個方法中處理這個值

class PeopleIdHandler(web.RequestHandler):
    def initialize(self, name):
        self.db_name = name

    async def get(self, id, *args, **kwargs):
        # 實現跳轉到/people/name的頁面
        # reverse_url後傳遞參數的個數 根據url配置裏的設定變動
        self.redirect(self.reverse_url("people_name", "bobby"))

5:在url配置中的推薦寫法,提升可讀性

urls = [
    # 在變量前 加上?P<>    ;<>內的值 變量名稱要和後面用的保持一致
    tornado.web.URLSpec("/people/(?P<name>\w+)/(?P<age>\d+)/(?P<gender>\w+)/?", PeopleInfoHandler, name="people_info"),
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章