1. 程式人生 > 其它 >Python測試開發flask - 2. URL與函式的對映

Python測試開發flask - 2. URL與函式的對映

URL與函式的對映:

從之前的app.py檔案中,我們已經看到,一個URL要與執行函式進行對映,使用的是@app.route裝飾器。

@app.route裝飾器中,可以指定URL的規則來進行更加詳細的對映,比如現在要對映一個文章詳情的URL,文章詳情的URL/article/id/,id有可能為1、2、3…,那麼可以通過以下方式:

@app.route('/article/<id>/')
def article(id):
   return '此時是第 %s 頁 article detail' % id

其中<id>,尖括號是固定寫法,語法為<variable>variable

預設的資料型別是字串。如果需要指定型別,則要寫成<converter:variable>,其中converter就是型別名稱,可以有以下幾種:

  • string: 預設的資料型別,接受沒有任何斜槓/的字串。

  • @app.route('/article/<number>')
    def article_list(number):
       return '%s article detail'%number
  • int:  資料型別只能傳遞'int'型別

  • @app.route('/page/<int:artiole_id>/')
    def article_detail(artiole_id):
       
    return '您請求的文章是:%s'%artiole_id
  • float: 資料型別只能傳遞'float'型別

  • @app.route('/page/<float:artiole_id>/')
    def article_detail(artiole_id):
       return '您請求的文章是:%s'%artiole_id
  • path: 和string類似,都是可以接收任意的字串,但是'path'可以接收路徑,也就是說可以包含傳遞斜槓/

  • @app.route('/page/<path:test>/')
    def article_detail(test):
       return
    '您請求的文章是:%s'%test
  • uuid: uuid型別的字串,只能接收符合uuid 的字串,uuid是一個全宇宙都唯一的字串,一般可以用來作為表的主鍵。

  • @app.route('/user/<uuid:user_id>/')
    def user_detail(user_id):
       return '使用者個人中心頁面:%s'%user_id
  • any:可以指定多種路徑,這個通過一個例子來進行說明:

  • @app.route('/<any(user_1,user_2):url_path>/<id>')
    def detail(url_path,id):
        if url_path == 'user_1':
            return 'user_1個人中心, %s' %id
        else:
            return 'user_2個人中心, %s' %id

    detail這個函式可以接受兩個URL,一個是/user_1/,另一個是/user_2/。並且,一定要傳url_path引數,當然這個url_path的名稱可以隨便。

如果不想定製子路徑來傳遞引數,也可以通過傳統的?=的形式來傳遞引數,例如:/article?id=xxx,這種情況下,可以通過request.args.get('id')來獲取id的值。如果是post方法,則可以通過request.form.get('id')來進行獲取。程式碼如下

# 匯入request模組
from flask import request
@app.route('/search/')
def seacher():
    # wd = request.args.get('wd',type=str,default=None) # get
    wd = request.form.get('wd',type=str,default=None) # post
    return '您通過查詢字串的方式傳遞的引數是:%s'%wd