2013-05-18 57 views
3

從燒瓶文檔:當我使用app.add_url_rule時,是否需要命名這個url?

def index(): 
    pass 
app.add_url_rule('/', 'index', index) 

它還說:

端點 - 端點已註冊的URL規則。 Flask本身假定視圖函數的名稱作爲端點

確實,如果我做了app.add_url_rule('/', None, index)這一切似乎工作正常。 (我不知道的術語和什麼樣的「端點」實際上是。)

一些其他問題:

  1. 是否有任何理由指定第二個參數?

  2. 第二個參數確實是「端點」嗎?

  3. (不)指定第二個參數有什麼好處/缺點?

  4. 如果在另一個url規則中使用了相同的名稱會怎麼樣?第一個被覆蓋?這是打算?

回答

2

在這種情況下,端點只是您的應用程序的有效URL的術語。維基百科:

在面向服務的體系結構,端點的入口點到服務,進程或隊列或主題目標

至於命名您的網址 - 是的,這是可選的。定義名稱有一些好處。例如,使用* url_for *()或重定向()時,您可以指定url的名稱作爲快捷方式。這帶來了額外的好處,允許你改變你的url結構,而不必改變與該url交互的每一行代碼,因爲它只按名稱引用它。

因此,在你的榜樣,你可以參考你的索引網址是這樣的:

return redirect('index') 

爲了您的最後一個問題,我不知道會發生什麼。嘗試使用該名稱解析網址時可能會出錯。無論哪種方式,沒有理由定義兩個具有相同名稱的不同網址。

1

的原因第二個參數如下:

比方說,你在設計一個網站,你有/login是您的用戶輸入自己的用戶名,密碼,OpenID的,無論頁面。成功登錄後,您可能需要將它們發送到/。在瓶,規範的方式做到這一點是:

return redirect(url_for('index')) 

哪裏'index'是你定義爲處理程序/的功能,例如名,

@app.route('/') 
def index(): 
    return render_template('index.html') 

如果你不是做:

def index(): 
    return render_template('index.html') 

app.add_url_rule('/', None, index) 

當你的用戶請求/明確它會工作得很好,但是當你的用戶成功登錄,他們將面臨一個可怕的錯誤消息,並且有手動訪問/

總之,這是正確的做法。

此外,你應該注意的是

@app.route('/') 
def index(): 
    return render_template('index.html') 

而且

def index(): 
    return render_template('index.html') 

app.add_url_rule('/', 'index', index) 

是完全一樣的,並在這兩個最後兩個片段redirect(url_for('index'))將很好地工作。

相關問題