【问题标题】:Validating for reCAPTCHA in flask在烧瓶中验证 reCAPTCHA
【发布时间】:2021-06-14 16:55:08
【问题描述】:

我在我的网站上制作了一个错误表单,它仍然可以正常工作,除了验证码有点傻。如果我填写文本上的所有字段而不只是填写验证码,它仍然会发送给我,并且没有警告或任何东西,我在那里设置的验证不会响应,我需要帮助。

HTML 代码:

<form action="{{ url_for('get_contact') }}" method=post>
            <div>
                <p>
                    {{ form.csrf_token }}
                    {{ form.name.label }} <br>
                    {{ form.name(placeholder='Jméno') }}
                    <ul>
                        {% for error in form.name.errors %}
                            <li style="color:red;">{{ error }}</li>
                        {% endfor %}
                    </ul>
                <p>
                    {{ form.email.label }} <br>
                    {{ form.email(placeholder='Email') }}
                    <ul> 
                        {% for error in form.email.error %}
                           <li style="color:red;">{{ error }}</li> 
                        {% endfor %}
                        </ul>
                </p>
                <p>
                    {{ form.message.label }}<br>
                    {{ form.message(placeholder='Zpráva') }}
                </p>
                <p>
                    {{ form.recaptcha }}
                    {% for error in form.recaptcha.errors %}
                    <ul>
                        <li>{{ error }}</li>
                    {% endfor %}
                    </ul>
                    <input class="contact-submit" type="submit" value="Submit">

烧瓶代码:

@app.route('/contact', methods=["GET","POST"])
def get_contact():
    form = ContactForm()
    if request.method == 'POST':
        name =  request.form["name"]
        email = request.form["email"]
        message = request.form["message"]
        res = pd.DataFrame({'name':name, 'email':email, 'message':message}, index=[0])
        res.to_csv('./contactDatabase.csv', mode='a', header =False)
        return redirect(url_for("rgb"))
    else:
        return render_template('contact.html', form=form)

Flask 表单代码:

class ContactForm(FlaskForm):
    name = TextField("Jméno", [validators.DataRequired(), validators.Length(max=255)])
    email = StringField("Email", [validators.DataRequired(), validators.Length(min=6, max=35)])
    message = TextAreaField("Zpráva")
    recaptcha = RecaptchaField()

【问题讨论】:

    标签: html flask recaptcha flask-wtforms


    【解决方案1】:
    1. 您可能忘记使用form.validate_on_submit()
    @app.route('/contact', methods=["GET","POST"])
    def get_contact():
        form = ContactForm()
        if request.method == 'POST' and form.validate_on_submit():
            name =  form.name
            email = form.email
            message = form.message
            res = pd.DataFrame({'name':name, 'email':email, 'message':message}, index=[0])
            res.to_csv('./contactDatabase.csv', mode='a', header =False)
            return redirect(url_for("rgb"))
        else:
            return render_template('contact.html', form=form)
    

    我没有测试上面的代码,所以不知道它是否有效。

    1. 检查app.testing 是否为True1

    flask-wtforms documentation 声明:

    为了您的方便,在测试您的应用程序时,如果app.testing 为 True,recaptcha 字段将始终有效。

    1. 另外,不要忘记您必须使用从您的 ReCaptcha 注册中收到的相应公钥和私钥来设置 RECAPTCHA_PUBLIC_KEYRECAPTCHA_PRIVATE_KEY 配置变量。

    1 如果直接设置为True或设置TESTINGTrue,则返回True

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      • 2014-04-09
      相关资源
      最近更新 更多