记住用户注册

时间:2018-07-06 09:43:13

标签: python flask

我在注册/登录过程中遇到麻烦。我正在使用Flask作为后端

这是设置:

当用户访问该站点时,他们看到一个注册页面,所有这些数据都存储在sqlite3数据库中。在按下创建帐户后,他们将被重定向到仪表板。下次他们访问该网站时,应该转到登录页面而不是注册页面。

但是我该如何处理?

我正在使用Login_Manager

这是我的注册/登录代码部分

def index():
return redirect('signup', code=302)

@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
    user = User.query.filter_by(username=form.username.data).first()
    if user:
        if check_password_hash(user.password, form.password.data):
            login_user(user, remember=True)
            return redirect(url_for('dashboard'))
        else:
            return 'invalid user'


    #return form.username.data + ' ' + form.password.data

return render_template('login.html', form=form)


@app.route('/signup', methods=['GET', 'POST'])
def signup():
form = RegisterForm()
hashed_password = generate_password_hash(form.password.data, method='sha256')
if form.validate_on_submit():
    new_user = User(username=form.username.data, password=hashed_password)
    db.session.add(new_user)
    db.session.commit()

    return render_template('dashboard.html')


   # return form.username.data + ' ' + form.password.data

return render_template('signup.html', form=form)

1 个答案:

答案 0 :(得分:0)

正如评论中所提到的,cookie是必经之路。这是Flask中的一个简单实现:

添加以下其他导入语句:

from flask import request, make_response

更改def index(),以检查用户是否具有带有用户名的cookie:

@app.route("/")
def index():
    username = request.cookies.get('username')
    if username:
        return redirect('login', code=302)
    return redirect('signup', code=302)

他们注册时,为他们创建一个cookie:

@app.route('/signup', methods=['GET', 'POST'])
def signup():
    form = RegisterForm()
    hashed_password = generate_password_hash(form.password.data, method='sha256')
    if form.validate_on_submit():
        new_user = User(username=form.username.data, password=hashed_password)
        db.session.add(new_user)
        db.session.commit()

这是新行。我们保存响应对象,以便可以向其中添加Cookie,然后将其返回。

        resp = make_response(render_template('dashboard.html'))
        resp.set_cookie('username', form.username.data)
        return resp

这在quickstart under cookies中有记录。