-1

I'm trying to check if a username is already in my database and then register new users. But no matter if I input a username that is already registered or not, it reverts back to register.html with ?username=xxx&password=xxx in the URL. How can I fix this?

@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')
galfisher
  • 1,122
  • 1
  • 13
  • 24
Kyle
  • 143
  • 4
  • 11

1 Answers1

0

Your code (the if statement block) is expecting a POST request and looks like you are sending a GET request with ?username=xxx&password=xxx. Change your form's method to POST. If you don't specify a method in your HTML form, by default it will use GET. Also you need to correct your code since POST requests in Flask don't use request.form.get() they use request.form['key_name']

Change your code to the below and make sure to change your form method in your HTML template to 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')

an example to what your HTML form should look like

<form action="{{url_for('register')}}" method="POST">
     <!––some input-->
</form>
shifloni
  • 719
  • 4
  • 7
  • shifloni, thank you!! I was looking at the Python code forever when I should've been looking at my html and the missing method="POST". Thanks again. Problem solved. – Kyle Aug 24 '18 at 04:35
  • Glad I was able to help. Can you please mark my answer as the accepted answer? Thank you! – shifloni Aug 24 '18 at 04:56
  • Just did. Thanks again. – Kyle Aug 24 '18 at 11:27