flask--url_for函數

一直以來對url_for函數的用法很模糊,看了一篇文章終於有些瞭解了。https://blog.csdn.net/yannanxiu/article/details/52287870

url_for()函數是用於構建指定函數的URL。

url_for操作對象是函數,而不是route裏的路徑。
寫一個測試代碼:

from flask import Flask,url_for

app = Flask(__name__)

@app.route('/')
def index():
    return "hello"

@app.route('/login')
def login():
    return "world"

with app.test_request_context():
    print(url_for('index'))
    print(url_for('login'))

運行後結果是這樣的:

/
/login

然後我將login()這個函數名字改爲LOGIN(),再次運行,然後就報錯了。因爲這時候不再有login()這個函數存在了,url_for不能構造關於login的新鏈接了。

BuildError: Could not build url for endpoint ‘login’. Did you mean ‘index’ instead?

在python+flask的web開發中,url_for() 函數最簡單的用法是以視圖函數名作爲參數, 返回對應的 URL。還可以用redirect函數進行跳轉。它是重定向函數,輸入一個URL後,自動跳轉到另一個URL所在的地址,下面是一段代碼實例。

from flask import Flask,url_for,render_template,redirect
app = Flask(__name__)

@app.route('/')
def index():
    return redirect(url_for('user_index',username='default'))

@app.route('/user/<username>/<userid>')
def user_index(username,userid):
    return render_template('index.html',username=username)

執行上面這代碼的時候,我們訪問程序給出的http://127.0.0.1/5000頁面,這時由於redirect函數的作用,頁面會跳轉到由url_for函數生成的鏈接的頁面。顯示index.html裏面的內容。我們可以看到,usr_for函數的第一個參數是函數名user_index,就是說,它會返回user_index對應的URL,也就是http://127.0.0.1/5000/user/defualt

對於url_for的一點新發現
先貼代碼:

class Course(Base):    
    ...
    @property
        def url(self):
        return url_for('course.detail',course_id=self.id)

上面這個類是一個數據庫的映射對象,對應數據庫的一張表。爲了後面方便,我給它增加了一個url屬性。可以看到,url_for函數的第一個參數是‘course.detail’。detail這個函數在另一個python模塊中,並且course這個文件夾和當前這段代碼所在的文件夾並不在同一目錄。所以這一點我覺得有點奇怪。

還有一個點,使用url_for() 生成動態地址時, 將動態部分作爲關鍵字參數傳入。例如,

url_for ('user', name='john', _external=True)

的返回結果是http://localhost:5000/user/john。 傳入url_for() 的關鍵字參數不僅限於動態路由中的參數。函數能將任何額外參數添加到 查詢字符串中。例如,url_for(‘index’, page=2) 的返回結果是/?page=2。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章