消息闪烁烧瓶

时间:2017-11-11 19:52:08

标签: python twitter-bootstrap flask sqlite flask-sqlalchemy

我设置了一个烧瓶网络应用程序,目前我的代码已经设置好,以便当用户注册时,他们的详细信息会保存到数据库中,使用SQLite和SQLAlchemy进行设置。在创建新用户的那一刻 - 它在新页面上返回return '<h1>New user has been created!</h1>',但我希望将其显示在同一个html页面上。

我查看了在线消息和Stack Overflow消息的示例,但不确定如何使用我的代码设置方式进行设置。我已在app.py文件和signup.html模板中添加了注册和登录部分,以重现问题。

app.py文件中的注册部分

@app.route('/signup/', methods=['GET', 'POST'])
def signup():
    form = RegisterForm()

    if form.validate_on_submit():
        hashed_password = generate_password_hash(form.password.data, method='sha256')
        new_user = User(username=form.username.data, email=form.email.data, password=hashed_password)
        db.session.add(new_user)
        db.session.commit()

        return '<h1>New user has been created!</h1>'

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

signup.html模板

{% block body_content %}
<div class="container">

<form method="POST" action="/signup">
    {{ form.csrf_token }}
    <div class="form-group">
       {{ form.username }}
    </div>
    <div class="form-group">
        {{ form.email }}
    </div>
    <div class="form-group">
        {{ form.password }}
    </div>
    <button type="submit" class="btn btn-primary">Sign Up</button>
    </form>

      <div class="errors">
        {% for field, err in errors %}
            <p>{{field}} : {{err|join(', ')}}</p>
        {% endfor %}
      </div>
</div> 
{% endblock %}

app.py文件的登录部分

@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=form.remember.data)
                return redirect(url_for('dashboard'))

        flash("Invalid username or password")

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

1 个答案:

答案 0 :(得分:2)

在您的html中添加此代码:

{% for message in get_flashed_messages() %}
      <div class=flash>{{ message }}</div>
{% endfor %}

这是你的py:

from flask import flash

而不是

return "<h1>...

把这个:

flash("some text to flash")