社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

Callum • 3 年前 • 1271 次点击  

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/132956
 
1271 次点击  
文章 [ 2 ]  |  最新文章 3 年前
vincent
Reply   •   1 楼
vincent    3 年前

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

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

values = cursor.fetchone()
if values:
    name = values[0]
Amadan
Reply   •   2 楼
Amadan    3 年前

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元组,以及为什么有逗号。