簡體   English   中英

FlaskForm 在提交時未驗證

[英]FlaskForm not Validating on Submit

我錯過了什么嗎? 或者也許我沒有做我的領域選擇選項? 我添加了 CSRF 令牌,按下提交后它只會清除數據但不會引發錯誤。 我注意到的是它永遠不會進入 if 語句 if form.validate_on_submit():

這是我的forms.py

from flask_wtf import FlaskForm
from flask_wtf.csrf import CSRFProtect
from wtforms import StringField, TextAreaField, DateField, IntegerField
from wtforms.validators import DataRequired

csrf = CSRFProtect()


class NewAccount(FlaskForm):
    account_field = StringField("Dealership Name:", validators=[DataRequired()])
    rep_field = StringField("Sales Rep:", validators=[DataRequired()])
    group_field = StringField("Group:", default ="n/a")
    price_field = IntegerField("Price:", validators=[DataRequired()])
    setup_field = IntegerField("Setup:", validators=[DataRequired()])
    signed_field = DateField("Signed Date(MM/DD/YYYY):",
                     format='%m/%d/%Y',validators=[DataRequired()])
    commitment_field = StringField("Commitment:", validators=[DataRequired()])
    payment_field = StringField("Payment Type:", validators=[DataRequired()])
    vertical_field = StringField("Vertical:",validators=[DataRequired()])

這是我在提交時的驗證:

@app.route('/new_account', methods=('GET', 'POST'))
def add():
    """create new account"""
    form = forms.NewAccount()
    if form.validate_on_submit():
        models.MasterLog.create(account_name=form.account_field.data,
                            sales_rep=form.rep_field.data,dealer_group=form.group_field.data,
                            price=form.price_field.data,setup=form.setup_field.data,
                            signed_on=form.signed_field.data,commitment=form.commitment_field.data,
                            payment_type=form.payment_field.data,vertical=form.vertical_field.data)
        flash("Account Added! Thanks!", "success")   
        return redirect(url_for('active'))
    else:
        print("An error occured")
        return render_template('new.html', form=form)

這是 HTML 表單:

{% extends "layout.html" %}
{% from 'macros.html' import render_field %}

{% block content %}
<div class="new-entry">
    <div class="form-style-8">
        <h2>New Account</h2>
        <form method='POST' action=''> 
            {% for field in form %}
                {{ form.hidden_tag() }}
                {% if field.name != 'csrf_token' %}
                    {{ field.label() }}
                {% endif %}            
                {% if field.name == 'rep_field' %}
                    <select id="reps" name="reps">
                        <option value="Dan">Dan</option>
                        <option value="Danielle">Danielle</option>
                        <option value="Hal">Hal</option>
                        <option value="Hessam">Hessam</option>
                        <option value="Jessica">Jessica</option>
                        <option value="Travis">Travis</option>
                    </select>
                  
                {% elif field.name == 'commitment_field' %}
                    <select id="commitment" name="commitment">
                        <option value="Anually">Anually</option>
                        <option value="Quarterly">Quarterly</option>
                        <option value="6 Months">6 Months</option>
                        <option value="Monthly">Monthly</option>
                    </select>
                  
                {% elif field.name == 'payment_field' %}
                    <select id="payment" name="payment">
                        <option value="Pay As You Go">Pay As You Go</option>
                        <option value="Advanced Payment">Advanced Payment</option>
                    </select>
                  
                {% elif field.name == 'vertical_field' %}
                  <select id="vertical" name="vertical">
                      <option value="Franchise">Franchise</option>
                      <option value="Independent">Independent</option>
                      <option value="Sokal">Sokal</option>
                      <option value="PowerSport">Powersport</option>
                  </select>
                {% elif field.name =='price_field' %}
                    {{field(value='$')}}
                {% elif field.name =='setup_field' %}
                    {{field(value='$')}} 
                {% elif field.name =='signed_field' %}
                    {{field(type='date')}} 
                {% else %}
                    {{ render_field(field) }}
                {% endif %}
                
            {% endfor %}
            <div class="button-section">
                <button type="submit" id="submit" class="button">Add</button>
                <button class="button" onclick="document.location='active'">Cancel</button>
            </div>
        </form>
    </div>
</div>
</div>
{% endblock %}

這是我的模型:

from peewee import *
import csv
import datetime

DATABASE = SqliteDatabase('Master.db')

class MasterLog(Model):
    id = AutoField()
    timestamp = DateTimeField(default=datetime.datetime.now, null=True)
    account_name = CharField(max_length=200, unique=True)
    sales_rep = CharField(max_length=200, unique=False)
    dealer_group = CharField(max_length=200, unique=False)
    price = IntegerField(null=True)
    setup = IntegerField(null=True)
    signed_on = DateTimeField(null=True)
    integrated_on = DateTimeField(null=True)
    billable_on = DateTimeField(null=True)
    commitment = CharField(max_length=200, unique=False)
    payment_type = CharField(max_length=200, unique=False)
    billing_method = CharField(max_length=200, unique=False, null=True)
    kick_off = CharField(max_length=200, unique=False, null=True)
    last_visit = DateTimeField(null=True)
    vertical = CharField(max_length=200, unique=False)
    notes = CharField(max_length=200, unique=False, null=True)
    cancelled_on = DateTimeField(null=True)



    class Meta:
        database = DATABASE

改變

{{ form.hidden_tag() }}

{{ form.csrf_token }}

我有同樣的問題,我做了兩件事來解決這個問題。

首先,我在我留空的表單字段中添加了一個 Optional() 驗證器,例如這個field = StringField('string', validators=[Optional()])

然后換行

if form.validate_on_submit():if form.validate_on_submit:沒有()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM