代码之家  ›  专栏  ›  技术社区  ›  Callum

在HTML(Python应用程序)中使用变量时,在{name}周围放置不必要的括号

  •  0
  • Callum  · 技术社区  · 2 年前

    我正在创建一个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 变量,该名称用于启动会话。

    然后,用户返回到登录页面(现在已登录),其中另一个变量调用 名称 (我可能会对此进行更改,以便更容易区分)传递存储在会话中的名称,以便使用此功能在网站上显示:

    @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中,名称显示为 (‘约翰’,) ,例如,这意味着:

    <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应用程序方面更有经验的人进行了交流,但他们没有发现问题,那么是否有其他人可以给我一个指针,说明是什么导致了这种情况?

    2 回复  |  直到 2 年前
        1
  •  1
  •   Amadan    2 年前

    cursor.fetchone() 以元组形式返回一行中的所有选定字段。例如,如果你做了 SELECT first, last ... ,你会得到一个2元组 ("John", "Smith") .

    您只请求了一个字段,所以得到了1元组 ("John",) :你没有字符串 "John" ! 改为:

    name = cursor.fetchone()[0]
    

    编辑:或者,正如文森特在下面警告的那样,更加有力:

    row = cursor.fetchone()
    name = row[0] if row else None
    

    看见 How to create a tuple with only one element 讨论1元组,以及为什么有逗号。

        2
  •  0
  •   Vincent    2 年前

    光标。fetchone()返回一个包含所有 columns of the row . 它的字符串表示形式如下所示。

    您可以通过选择响应中的第一项来解决此问题:

    values = cursor.fetchone()
    if values:
        name = values[0]