码农家园

关闭
导航

关于python:Flask Session的用户注册功能


flaskloginpythonsession

User Registration Function with Flask Session

本问题已经有最佳答案,请猛点这里访问。

我正在尝试检查数据库中是否已有用户名,然后注册新用户。但是,无论我输入的用户名是否已经注册,它都会在URL中使用?username=xxx&password=xxx恢复到register.html。我怎么修这个?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@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')

您的代码(if语句块)需要一个POST请求,看起来您正在用?username=xxx&password=xxx发送一个GET请求。把你的表格改成POST。如果您没有在HTML表单中指定方法,默认情况下它将使用GET。另外,您需要更正您的代码,因为在flask中的post请求不使用request.form.get(),它们使用request.form['key_name']。

将代码更改为下面的代码,并确保将HTML模板中的表单方法更改为POST。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@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表单的外观示例

1
2
3
<form action="{{url_for('register')}}" method="POST">
     <!––some input-->
</form>
相关讨论

  • 希弗洛尼,谢谢你!!我一直在关注python代码,而我本应该关注我的html和缺失的method="post"。再次感谢。问题解决了。
  • 很高兴我能帮忙。你能把我的答案标为公认的答案吗?谢谢您!
  • 就是这样。再次感谢。


  • 关于python:如何获取在flask请求中接收的数据
  • 关于python:为什么用dict.get(key)代替dict[key]?
  • 关于html:HTTP方法的默认形式是什么?
  • python:使用模块的名称(字符串)调用模块的函数
  • python:在函数中使用全局变量
  • python:如何创建功能装饰器链?
  • 关于python:带有尾随斜杠的Flask POST

Copyright ©  码农家园 联系:[email protected]