我正在創建一個 Python Flask 應用程式,其中用戶帳戶的名稱從 MySQL 資料庫傳遞到 Flask 應用程式,它可以在網頁上使用。
我已經成功地能夠使用以下方法從資料庫中的用戶憑據中檢索名字:
if sha256_crypt.verify(userDetails['password'], str (data[0])):
cursor.execute("SELECT fname FROM user_details WHERE email = %s;", (email, ))
name = cursor.fetchone()
session['user'] = name
return redirect(url_for('success', name=name))
為了解釋這個代碼片段的作用,一旦用戶輸入的登錄詳細資訊已通過資料庫檢查并獲得授權,查詢就會從user_details表中提取名字并將其分配給name變數,該名稱用于啟動會話。
然后用戶回傳到登錄頁面(現在已登錄),其中另一個名為的變數name(我可能會更改它以便更容易區分)傳遞存盤在會話中以使用此函式顯示在網站上的名稱:
@app.route('/loginpage', methods=['POST', 'GET'])
def loginpage():
if 'user' in session:
name = session['user']
return render_template('login.html', name=name, loggedOut=False, loggedIn=True)
return render_template('login.html', loggedOut=True, loggedIn=False)
這一切都成功地作業并從資料庫中檢索用戶的名字,但唯一的問題是當名稱{{name}}在 HTML 中顯示時,名稱顯示為('John',),這意味著例如:
<div class="container logout-greeting">
<h5 style="text-align: center">Hello {{name}}, it appears you are logged in, click here to log out</h5>
</div>
應顯示為:
“您好 John,您似乎已登錄,請單擊此處退出”
而是顯示為:
“您好('John,'),您似乎已登錄,請單擊此處注銷”
我已經與在構建 Web 應用程式方面更有經驗的人進行了檢查,但他們無法發現問題,所以其他人是否有可能給我一個關于導致此問題的指標?
uj5u.com熱心網友回復:
cursor.fetchone()將一行中的所有選定欄位作為元組回傳。例如,如果你做了類似的事情SELECT first, last ...,你會得到一個 2-tuple ("John", "Smith")。
你只請求了一個欄位,所以你得到 1-tuple ("John",):你沒有得到一個字串"John"!改成:
name = cursor.fetchone()[0]
編輯:或者,正如文森特在下面警告的那樣,更強大:
row = cursor.fetchone()
name = row[0] if row else None
請參閱如何創建只有一個元素的元組以討論 1 元組,以及為什么那里有逗號。
uj5u.com熱心網友回復:
cursor.fetchone() 回傳一個包含行的所有列的元組(類似于串列)。它的字串表示形式如下所示。
您可以通過選擇回應中的第一項來解決此問題:
values = cursor.fetchone()
if values:
name = values[0]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/464311.html
