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"),