2013-11-22 78 views
1

我跟着一起瓶教程,並有關於這些設定的登錄功能的代碼問題(它有HTML部分和Python部分):登錄與瓶框架

HTML部分:

<h1>Login</h1> 
{% if error %} 
    <p class=error><strong>Error:</strong> {{ error }} 
{% endif %} 
    <form action="" method=post> 
     <dl> 
      <dt>Username: 
      <dd><input type=text name=username value="{{request.form['username']}}"> 
      <dt>Password: 
      <dd><input type=password name=password> 
     </dl> 
     <p><input type=submit value=Login> 
    </form> 

Python的一部分:

@app.route('/log', methods=['GET', 'POST']) 
def log(): 
    error = None 
    if request.method == 'POST': 
     if request.form['username'] != 'admin' or request.form['password'] != 'admin': 
      error = 'Invalid Credentials. Please try again.' 
     else: 
      return redirect(url_for('hello')) 
    return render_template('log.html', error=error) 

此代碼照常工作。我必須鍵入admin到用戶名框和password複選框即可登錄我的問題是關於這些四行HTML部分:

<dt>Username: 
<dd><input type=text name=username value="{{request.form['username']}}"> 
<dt>Password: 
<dd><input type=password name=password> 

爲什麼,當我只有把這個value="{{request.form['username']}}"username,在登錄過程仍然正常工作?它不一定是這樣,才能正常工作嗎?

<dt>Username: 
<dd><input type=text name=username value="{{request.form['username']}}"> 
<dt>Password: 
<dd><input type=password name=password value="{{request.form['password']}}"> 
+0

你的意思是'

'? – Stedy

+0

yes,^^「sry。我編輯過它 – Team

回答

3

不,我相信你對在用戶名字段中設置value="{{request.form['username']}}"的目的感到困惑。

讓我們通過一個登錄例如:

  • 當您導航到/log相關視圖功能呈現log.htmlrequest.form['username']的值在此處未設置,因此用戶名字段以空值字符串呈現。密碼默認情況下也會獲得一個空字符串。
  • 輸入用戶名和密碼並點擊提交後,將再次調用路線作爲POST請求,並且request.form['username']request.form['password']都將設置爲用戶輸入的值。
  • 現在你有兩種可能性:
    • 如果用戶名和密碼是正確的,那麼用戶登錄並在應用程序的其他地方重定向。事實上,表單中的用戶名字段的值設置爲request.form['username']完全沒有影響,因爲此時HTML表單不再使用。
    • 如果用戶名和/或密碼不正確,則會再次呈現登錄表單,供用戶重試。將用戶名字段的值設置爲request.form['username']將導致用戶名字段被記住,用戶第一次輸入的值將第二次顯示。另一方面,密碼將再次顯示爲空。

記住上一個失敗的登錄嘗試的用戶名是一個方便的功能。如果出現錯誤,您可以對其進行編輯並進行更正。

但是,在密碼字段中執行此操作沒有任何意義,因爲您無法看到字符,因此您不知道是否必須進行更正。對於密碼,你必須再次從頭開始輸入密碼。

+1

Crystal clear my master!非常感謝soooo。所以HTML name = username和name = password中的輸入名稱標記將被髮送到python以評估True或False這部分代碼是否正確?如果request.form ['username']!='admin'或request.form ['password']!='admin':?我理解正確嗎? – Team

+0

正確的是,HTML並沒有真正的邏輯關聯,它所定義的就是那些發送給視圖函數的值。 – Miguel