【问题标题】:Python flask flash message does not display on enter click only [duplicate]Python烧瓶闪存消息仅在输入单击时不显示[重复]
【发布时间】:2017-06-26 01:10:12
【问题描述】:

我有一个简单的网站,用户可以在其中输入电子邮件。如果输入了电子邮件,则会显示一条闪烁消息。

如果表单是通过在提交按钮上单击鼠标来提交的,它可以正常工作。

如果表单是通过键盘提交的,请按“enter”,不会显示 flash 消息。

在这两种情况下,表单都成功提交并向数据库添加条目。

这是我的第二个项目,我从未观察到这种行为,可能我从未注意到它,现在将到处检查。

这就是我显示 flash 的方式:

{% with messages = get_flashed_messages() %}
        {% if messages %}
            <div class="flashes col-xs-12">
            {% for message in messages %}
                <p>{{ message }}</p>
            {% endfor %}
            </div>
        {% endif %}
    {% endwith %}

代码:

@app.route('/', methods=["GET","POST"])
def index():
    form = NewsletterForm()

    if form.validate_on_submit():
        newsletter_user = NewsletterUser(email=form.email.data.lower().strip())
        try:
            if newsletter_user:
                db_session.add(newsletter_user)                         
                db_session.commit()
                flash('Danke, wir melden uns bei Ihnen')
                return redirect(url_for("index"))
            else:
                flash('Email konnte nicht eingetragen werden')
                return redirect(url_for("index"))
        except IntegrityError:
            flash('Email wurde bereits eingetragen')
            return redirect(url_for("index"))

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

这是 HTML 中的部分(我将 flash 消息移到按钮下):

<div class="bg-image" alt="Baubedarf">

    <div class="index-container">

        <h1> Baubedarf finden. Bautechnik entdecken </h1>
        <p class="under-h1 hidden-xs hidden-sm"> Das Branchenverzeichnis für die Bauindustrie und Zulieferer </p>

        <div class="newsletter-form col-xs-12 col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-6 col-lg-offset-3">

            <form class="" method="POST" action="{{ url_for('index') }}">
                {{ form.csrf_token }}

                <h2> Werden Sie bereits von all Ihren potenziellen Kunden gefunden? </h2>

                <p class="hidden-xs"> Wenn nicht, dann bieten wir genau das richtige. Sichern Sie sich 6 Monate kostenlos alle Vorteile einer Premium Mitgliedschaft. Melden Sie sich direkt an! </p>

                {{ form.email(class="form-control", placeholder="Email") }}

                <button type="submit" class="btn"> Eintragen </button>

                <img alt="Banner" class="banner-index hidden-xs" src="../static/img/banner-index.png">

                {% if form.email.errors %}
                    {% for error in form.email.errors %} 
                        <p class="flashes-error-form"> {{ error }}</p>
                    {% endfor %}
                {% endif %}

                {% with messages = get_flashed_messages() %}
                    {% if messages %}
                    <div class="flashes col-xs-12">
                        {% for message in messages %}
                        <p>{{ message }}</p>
                        {% endfor %}
                    </div>
                {% endif %}
                {% endwith %}

            </form>
        </div>

    </div>

</div>

这是 Flash 消息的 CSS 样式:

.index-container .flashes {
    color: white;
    text-align: center;
    font-size: 20px;
}

编辑

我现在创建了一个新站点,该站点应在成功添加电子邮件时显示,但返回重定向似乎不起作用,这可能是 flash 消息不起作用的原因(尽管有时它也起作用)。

代码尽可能简单......我仍然不知道是什么导致了这个问题,因为每封电子邮件都已成功添加到数据库中。

如何在这个问题上创建赏金?这是我遇到的最奇怪的事情。

新零件,还是一样的问题:

 try:
        db_session.add(newsletter_user)                         
        db_session.commit()
        flash('Danke, wir melden uns bei Ihnen')
        return redirect(url_for("newsletter_success"))
    except IntegrityError:
        flash('Email wurde bereits eingetragen')
        return redirect(url_for("index"))
    except InvalidRequestError as e:
        print e
        flash('Email wurde bereits eingetragen')
        return redirect(url_for("index"))

【问题讨论】:

  • 我尝试使用提交按钮,但没有收到任何闪烁消息,代码中不存在flashes
  • 如果您尝试通过鼠标单击它会起作用
  • 在我的数据库中我已经看到了一些新的测试条目
  • 也许您看到了它们,但我没有收到任何消息,我正在使用鼠标按钮。可能是缓存问题?
  • 我不知道,我删除了浏览器缓存并使用隐身模式进行测试,如果我使用鼠标单击会看到消息,但看不到我是否使用回车键

标签: python flask


【解决方案1】:

好的,问题是会话的SECRET_KEY

我忘记改了。那是:

SECRET_KEY = os.urandom(24)

解决方案:

SECRET_KEY = "something complex generated by maybe os.urandom"

【讨论】:

    猜你喜欢
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    相关资源
    最近更新 更多