0
我的验证器似乎没有捕获错误。我可以在状态字段中输入20个字符的名称,或者不输入任何内容,并且适用的WTForm验证程序将其忽略并将其发送给ORM。我希望它在发送到数据库之前捕获验证错误,并在其中引发NOT NULL错误等。我需要强制用户在将错误输入发送到数据库之前进行纠正。我究竟做错了什么?验证器没有捕获错误
forms.py:
class ShelterForm(Form):
name = StringField('Name',
[validators.InputRequired(),
validators.Length(
max=50,
message="Limit 50 characters, please try again.")])
address = StringField('Address',
[validators.InputRequired(),
validators.Length(
max=30,
message="Limit 30 characters, please try again.")])
city = StringField('City',
[validators.InputRequired(),
validators.Length(
max=20,
message="Limit 20 characters, please try again.")])
state = StringField('State',
[validators.InputRequired(),
validators.Length(
max=13,
message="Limit 13 characters, please try again.")])
zipCode = IntegerField('zipCode',
[validators.InputRequired(),
validators.Length(
max=10,
message="xxxxx or xxxxx-xxxx")])
website = StringField('Website',
[validators.InputRequired()])
maximum_capacity = IntegerField('maximum_capacity',
[validators.InputRequired()])
views.py
from PuppyShelter import app
from PuppyShelter import models
from PuppyShelter import forms
from flask import render_template, url_for, request, redirect, flash, jsonify
@app.route('/shelters/shelternew', methods = ['GET','POST'])
def shelterNew():
form = forms.ShelterForm()
if request.method == "POST":
new_shelter = {
'name': form.name.data,
'address': form.address.data,
'city': form.city.data,
'state': form.state.data,
'zipCode': form.zipCode.data,
'website': form.website.data,
'maximum_capacity': form.maximum_capacity.data}
models.createShelter(new_shelter)
flash('A new shelter has been opened!')
return redirect(url_for('shelters'))
else:
return render_template('shelterNew.html', form = form)
shelterNew.py
<!DOCTYPE html>
<html lang="en">
<head>
<link rel=stylesheet type=text/css href="{{url_for('static', filename='bootstrap.css') }}"
</head>
<body>
<div>
<legend>New Shelter</legend>
<form method ='POST' actions='/shelterNew' enctype="multipart/form-data">
{{ form.csrf_token }}
<div class="form-group col-xs-4">
<label for="shelter-name">Name</label>
{{ form.name(class="form-control", placeholder="Name") }}
{% if form.name.errors %}
<div class="alert alert-info" role="alert">
{% for error in form.name.errors %}
{{ error }}
{% endfor %}
</div>
{% endif %}
</div>
<div class="form-group col-xs-6">
<label for="shelter-address">Address</label>
{{ form.address(class="form-control", placeholder="Address") }}
{% if form.address.errors %}
<div class="alert alert-info" role="alert">
{% for error in form.address.errors %}
{{ error }}
{% endfor %}
</div>
{% endif %}
</div>
<div class="form-group col-xs-4">
<label for="shelter-city">City</label>
{{ form.city(class="form-control", placeholder="City") }}
{% if form.city.errors %}
<div class="alert alert-info" role="alert">
{% for error in form.city.errors %}
{{ error }}
{% endfor %}
</div>
{% endif %}
</div>
<div class="form-group col-xs-4">
<label for="shelter-state">State</label>
{{ form.state(class="form-control", placeholder="State") }}
{% if form.state.errors %}
<div class="alert alert-info" role="alert">
{% for error in form.state.errors %}
{{ error }}
{% endfor %}
</div>
{% endif %}
</div>
<div class="form-group col-xs-3">
<label for="shelter-zipCode"></label>
{{ form.zipCode(class="form-control", placeholder="Zip") }}
{% if form.zipCode.errors %}
<div class="alert alert-info" role="alert">
{% for error in form.zipCode.errors %}
{{ error }}
{% endfor %}
</div>
{% endif %}
</div>
<div class="form-group col-xs-12">
<label for="shelter-website">Website</label>
{{ form.website(class="form-control", placeholder="enter url here") }}
{% if form.website.errors %}
<div class="alert alert-info" role="alert">
{% for error in form.website.errors %}
{{ error }}
{% endfor %}
</div>
{% endif %}
</div>
<div class="form-group col-xs-4">
<label for="shelter-maximum_capacity">Maximum Capacity</label>
{{ form.maximum_capacity(class="form-control", placeholder="Maximum Capacity") }}
{% if form.maximum_capacity.errors %}
<div class="alert alert-info" role="alert">
{% for error in form.maximum_capacity.errors %}
{{ error }}
{% endfor %}
</div>
{% endif %}
</div>
</br>
<div>
<input class="btn btn-success" type='submit' value='Create'>
<input class="btn btn-warning" type='reset' value='Reset'>
</div></br>
</form>
</br></br>
<a href='{{url_for('shelters')}}'class="btn btn-success btn-lg active" role="button"> Shelters.</a>
<a href='{{url_for('puppies')}}'class="btn btn-success btn-lg active" role="button"> Puppies.</a>
<a href='{{url_for('owners')}}'class="btn btn-success btn-lg active" role="button"> Owners.</a>
</div>
</body>
</html>