Flask中URL傳參方式詳解(any類型未解決)


Flask中傳遞參數詳解: 項目名稱:url_view_demo

### 傳遞參數: 傳遞參數的語法是:`/<參數名>/`。然后在視圖函數中,也要定義同名的參數。例如: @app.route('/article/<string:test>/') # 傳遞的參數名是test,因此就需要在函數的形參中定義同名的參數test def test_article(test): return 'test_article:{}'.format(test) ### 參數的數據類型: 1. 如果沒有指定具體的數據類型,那么默認就是使用`string`數據類型。 2. `int`數據類型只能傳遞`int`類型。 限制參數:<int:article_id>,如果在瀏覽器中訪問:http://127.0.0.1:5000/p/11111.0/
那就找不到報not found錯誤,因為我限制了是整形,你現在是浮點型,同理,如果你是浮點型,我使用 整形訪問,那就又訪問不到了 3. `float`數據類型只能傳遞`float`類型。 4. `path`數據類型和`string`有點類似,都是可以接收任意的字符串, 但是`path`可以接收路徑,也就是說可以包含斜杠。 5. `uuid`數據類型只能接收符合`uuid`的字符串。`uuid`是一個全宇宙都唯一的字符串, 一般可以用來作為表的主鍵。

關於path數據類型,在主文件中定義如下的代碼:

@app.route('/article/<path:test>/') path數據類型 def test_article(test): return 'test_article:{}'.format(test)

前端訪問:這種情況類似於string類型

我們在地址中加入/,看結果如何:

 

 由上面的結果可知:path類型支持在URL地址中帶斜杠/,他不會報錯!

如果是string數據類型,那會直接報錯,如下:

 

 

 

 

 接下來我們通過查詢字符串的形式來傳遞參數,就是通過`?key=value`的形式傳遞的。

# 通過問號的形式傳遞參數,例如百度:http://127.0.0.1:5000/d/?wd=%E7%AE%80%E4%B9%A6&pn=20
@app.route('/d/') def d(): wd = request.args.get("wd") page_number = request.args.get("pn") return "通過字符串查詢的關鍵字為:{}, 頁碼為:{}".format(wd, page_number)

針對這種情況,服務端使用reqeust.args來獲取問號形式的查詢字符串中參數的值。

 針對uuid的形式,我們先生成一個uuid:

import uuid
print(uuid.uuid4())

代碼如下:

@app.route('/u/<uuid:user_id>') def user_detail(user_id): return "用戶個人中心頁面:{}".format(user_id)

uuid:9b1deee5-4035-4398-b5f9-54ba28c94566

然后在瀏覽器中訪問:

【05】最后來看看any類型:

6. `any`數據類型可以在一個`url`中指定多個路徑。例如: @app.route('/<any(blog,article):url_path>/<id>/') def detail(url_path,id): if url_path == 'blog': return '博客詳情:%s' % id else: return '博客詳情:%s' % id

 

我們來總結下:

### 接收用戶傳遞的參數: 1. 第一種:使用path的形式(將參數嵌入到路徑中),就是上面講的。 2. 第二種:使用查詢字符串的方式,就是通過`?key=value`的形式傳遞的。 ```python @app.route('/d/') def d(): wd = request.args.get('wd') return '您通過查詢字符串的方式傳遞的參數是:%s' % wd ``` 3. 如果你的這個頁面的想要做`SEO`優化,就是被搜索引擎搜索到,那么推薦使用第一種形式(path的形式)。 如果不在乎搜索引擎優化,那么就可以使用第二種(查詢字符串的形式)。 例如CMS系統是內部人員使用,所以使用?傳遞參數的方式即可。例如簡書的地址: https://www.jianshu.com/p/e6fd2fc757d6

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM