【问题标题】:How can I show a message if the username already exists in Mysql database?如果用户名已存在于 Mysql 数据库中,如何显示消息?
【发布时间】:2021-04-16 04:55:36
【问题描述】:

谁能帮帮我?我是 Python Flask 的新手。如果“用户名”数据已经存在,我需要显示一条消息以避免重复条目。我正在使用 Mysql,我的表名是“users”。

例如,如果我尝试将 testuser1 保存为已经存在的用户名,我会得到 MySQLdb._exceptions.IntegrityError: (1062, "Duplicate entry 'testuser1' for key 'username'") 我试图从类似的问题中做一些解决方案,但对我不起作用。如果你能帮助我,我将非常感激。

代码如下:

@app.route('/register', methods=['GET', 'POST'])
def register():
    form = RegisterForm(request.form)
    if request.method == 'POST' and form.validate():
        name = form.name.data
        email = form.email.data
        username = form.username.data
        password = sha256_crypt.encrypt(str(form.password.data))

        cur = mysql.connection.cursor()
        cur.execute("INSERT INTO users(name, email, username, password) VALUES(%s, %s, %s, %s)", (name, email, username, password))
        mysql.connection.commit()
        # Close connection
        cur.close()

        flash('You are,registered!!', 'success')
        return redirect(url_for('login'))
    return render_template('register.html', form=form)

【问题讨论】:

    标签: python html mysql flask


    【解决方案1】:

    试试这个:

    x = cur.execute("SELECT * FROM users WHERE name = (%s)",
                              (thwart(name)))
    if int(x) > 0:
       flash("That name is already taken, please choose another")
       return render_template('register.html', form=form)
    else: 
       cur.execute("INSERT INTO users(name, email, username, password) VALUES(%s, %s, %s, %s)", (name, email, username, password))
    

    基本上,如果用户名存在,int(x) 将为 1,它会显示一条消息而不保存尝试。如果它不存在,它只是保存它。您也应该对电子邮件执行此操作,这样用户就不能拥有相同的电子邮件。

    完整代码:

    @app.route('/register', methods=['GET', 'POST'])
    def register():
        form = RegisterForm(request.form)
        if request.method == 'POST' and form.validate():
            name = form.name.data
            email = form.email.data
            username = form.username.data
            password = sha256_crypt.encrypt(str(form.password.data))
            cur = mysql.connection.cursor()
            x = cur.execute("SELECT * FROM users WHERE name = (%s)",
                              (thwart(name)))
            if int(x) > 0:
               flash("That name is already taken, please choose another")
               return render_template('register.html', form=form)
            else: 
               cur.execute("INSERT INTO users(name, email, username, password) VALUES(%s, %s, %s, %s)", (name, email, username, password))
               mysql.connection.commit()
               cur.close()
               flash('You are,registered!!', 'success')
               return redirect(url_for('login'))
        return render_template('register.html', form=form)
    

    (如果这不起作用请告诉我,我会尽力帮助您解决问题。另外,如果有人发现有任何问题,请告诉我,我也在学习 Flask)

    【讨论】:

    • 如果用户 b 插入 用户 a 正在“检查”
    • @Strawberry,好吧,我认为如果用户 b 插入并且用户 a 正在检查,那么它要么让用户 a 继续,要么会显示错误。即使用户 a 被保存,我认为它稍后会遇到完整性错误。我应该在我的代码中解决这个问题吗?不过我认为这不会发生,我认为机会非常低。
    • 我认为逻辑有缺陷(除非在事务中绑定)
    • @Strawberry,怎么会这样?我该如何解决这个问题? (我编程经验不是很丰富,我才13岁,大约一年半前开始的)
    • 这只是意味着你的头脑比我的更新鲜、更敏捷。 (蝙蝠将疾病传染给穿山甲给人类的可能性,但看看我们在哪里)。您的答案已被“接受”,因此我认为您无需“修复”它。但总的来说,我认为处理这类事情的方法是成熟的,并且(据我所知)相当稳健。
    【解决方案2】:

    从 mysql 表“用户”更改/替换您的唯一 ID,以便您可以看到重复的用户名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-10
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      • 2014-04-22
      相关资源
      最近更新 更多