Flask会话的用户注册功能

时间:2018-08-24 02:44:43

标签: python session flask login

我正在尝试检查数据库中是否已存在用户名,然后注册新用户。但是无论我输入的用户名是否已注册,它都将使用URL中的register.html恢复为?username=xxx&password=xxx。我该如何解决?

@app.route('/register', methods=['GET', 'POST'])
def register():
    if request.method == 'POST':
        reg_username = request.form.get['username']                                                           
        reg_password = request.form.get['password']                                                   
        # Check if username exists in database                                                                
        query = "SELECT username FROM users WHERE username = :username"
        if db.execute(query, {'username': reg_username}).first():                                                 
            flash('Username already exists')
            return render_template('register.html')                                                           
        else:                                                                                                     
            new_user = User(reg_username, reg_password)
            db.session.add(new_user)
            db.session.commit()
            session['username']=reg_username
            return redirect(url_for('login'))
    return render_template('register.html')

1 个答案:

答案 0 :(得分:0)

您的代码(if语句块)期望一个POST请求,并且看起来您正在通过GET发送一个?username=xxx&password=xxx请求。将表单的方法更改为POST。如果您未在HTML表单中指定方法,则默认情况下它将使用GET。 另外,您还需要更正代码,因为Flask中的POST请求不使用request.form.get(),而使用request.form['key_name']

将您的代码更改为以下内容,并确保将HTML模板中的表单方法更改为POST

@app.route('/register', methods=['GET', 'POST'])
def register():
    if request.method == 'POST':
        reg_username = request.form['username']                                                           
        reg_password = request.form['password']                                                   
        # Check if username exists in database                                                                
        query = "SELECT username FROM users WHERE username = :username"
        if db.execute(query, {'username': reg_username}).first():                                                 
            flash('Username already exists')
            return render_template('register.html')                                                           
        else:                                                                                                     
            new_user = User(reg_username, reg_password)
            db.session.add(new_user)
            db.session.commit()
            session['username']=reg_username
            return redirect(url_for('login'))
    return render_template('register.html')

HTML表单外观的示例

<form action="{{url_for('register')}}" method="POST">
     <!––some input-->
</form>