[英]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.