python flask url參數


python flask url參數

常見 url 傳參中都是 xxx?xxx=xxx

問題來了 flask中我沒有找到 關於xx? 問號的使用方式

是不是flask就不支持這種方式

如果有 route配置的時候該如何寫?

 

?后面的部分不參與url匹配,route時不必考慮。

url_for是可以干這個事情的

路由定義:

@app.route('/')
@app.route('/page/<int:page>/')
def index(page=1):
    pass

演示:

In [6]: url_for('index', page=3, a=2, b=3)
Out[6]: '/page/3/?a=2&b=3'

?后面是參數

可以通過request.args.get訪問

from flask import Flask, request
app = Flask(__name__)

@app.route('/')
def hello():
    text = request.args.get('text')
    return 'hello %s' text

通過 /?text=world 訪問 即可打出 hello world

 

構造URL(url_for):

一般我們通過一個URL就可以執行到某一個函數。如果反過來,我們知道一個函數,怎么去獲得這個URL呢?url_for函數就可以幫我們實現這個功能。url_for()函數接收兩個及以上的參數,他接收函數名作為第一個參數,接收對應URL規則的命名參數,如果還出現其他的參數,則會添加到URL的后面作為查詢參數。

通過構建URL的方式而選擇直接在代碼中拼URL的原因有兩點:

  1. 將來如果修改了URL,但沒有修改該URL對應的函數名,就不用到處去替換URL了。
  2. url_for()函數會轉義一些特殊字符和unicode字符串,這些事情url_for會自動的幫我們搞定。

 

from flask import Flask,url_for
app = Flask(__name__)
@app.route('/')
def hello_world():
    #將my_list函數名以字符串方式傳到url_for里面
    print(url_for('my_list'))
    return 'Hello World!'
@app.route('/list/')
def my_list():
    return 'my_list'
if __name__ == '__main__':
    app.run()

 運行,訪問瀏覽器查看結果

在控制台打印出了如下結果:

在url_for添加參數,會自動添加到url后面

 以后不管你原來的url如何修改,我都能通過url_for返回你修改過的正確url

 

# url_for筆記:

 

### `url_for`的基本使用:
`url_for`第一個參數,應該是視圖函數的名字的字符串。后面的參數就是傳遞給`url`。
如果傳遞的參數之前在`url`中已經定義了,那么這個參數就會被當成`path`的形式給
`url`。如果這個參數之前沒有在`url`中定義,那么將變成查詢字符串的形式放到`url`中。
```python
@app.route('/post/list/<page>/')
def my_list(page):
return 'my list'

 

print(url_for('my_list',page=1,count=2))
# 構建出來的url:/my_list/1/?count=2
```

 

### 為什么需要`url_for`:
1. 將來如果修改了`URL`,但沒有修改該URL對應的函數名,就不用到處去替換URL了。
2. `url_for`會自動的處理那些特殊的字符,不需要手動去處理。
```python
url = url_for('login',next='/')
# 會自動的將/編碼,不需要手動去處理。
# url=/login/?next=%2F
```

 

### 強烈建議以后在使用url的時候,使用`url_for`來反轉url。

 


免責聲明!

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



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