WTForms date validation
我目前正在尝试使用Flask构建一个简单的Web应用程序。 与此相关,我也使用WTForms,但是我在从表单获取日期信息并进行验证时遇到问题。
形式如下:
1 2 3 4 5 6 7 8 9 10 | from flask_wtf import FlaskForm from wtforms import SubmitField from wtforms.fields.html5 import DateField from wtforms.validators import DataRequired from datetime import date class LeasForm(FlaskForm): start_date = DateField("Start date", default=date.today(), format='%d/%m/%Y', validators=[DataRequired(message="You need to enter the start date")],) end_date = DateField("End date", validators=[DataRequired(message="You need to enter the end date.")], format='%d/%m/%Y') submit = SubmitField("To payment") |
然后在路线我有以下内容:
1 2 3 4 5 6 7 8 9 10 11 12 | @app.route('/url/<int:some_id>', methods=['GET', 'POST']) def some_route(some_id): .... form = LeasForm() print("Request form: {}".format(request.form)) print("Start date data: {}".format(form.start_date.data)) print("End date data: {}".format(form.end_date.data)) print("Leas form: {}".format(form.validate())) print("Leas form errors: {}".format(form.errors)) if form.validate(): return redirect(url_for('another_url')) .... |
并在视图中:
1 2 3 4 5 6 7 8 9 10 | .... <form action="" method="post"> {{form.errors}} {{ form.hidden_tag() }} {{ form.start_date.title}} {{ form.start_date}} {{ form.end_date.title}} {{ form.end_date}} {{ form.submit}} </form> |
但是这里出现了问题,当提交表单时,我尝试获取数据却说不存在。 这是从路由中的打印语句给出的输出:
1 2 3 4 5 | Request form: ImmutableMultiDict([('csrf_token', 'CHANGED_TOKEN'), ('start_date', '2018-04-04'), ('end_date', '2018-04-06'), ('submit', 'To payment')]) Start date data: None End date data: None Leas form: False Leas form errors: {'start_date': ['You need to enter the start date'], 'end_date': ['You need to enter the end date.']} |
我试图在WTForms文档和使用google中都找不到答案。
在此先感谢您,如果需要更多信息,请发送信息或评论。
WTForm custom date validation compare two dates Start date and End
date [Start date should not be greater than end date if so give
error].
DateExample.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | from flask import Flask, render_template from flask_wtf import FlaskForm from datetime import date from wtforms.fields.html5 import DateField from wtforms.fields.html5 import DateTimeField app = Flask(__name__) app.config['SECRET_KEY']='secretkey' class TestForm(FlaskForm): startdate = DateField('Start Date',default=date.today) enddate = DateField('End Date',default=date.today) def validate_on_submit(self): result = super(TestForm, self).validate() if (self.startdate.data>self.enddate.data): return False else: return result @app.route('/dateExample',methods=['GET','POST']) def index(): error = None form = TestForm() if form.validate_on_submit(): return 'Start Date is : {} End Date is : {}'.format(form.startdate.data, form.enddate.data) else: error ="Start date is greater than End date" return render_template('dateExample.html',form=form,error = error) if __name__ =="__main__": app.run(debug=True,port=5000) |
DateExample.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <html> <body> Flask WFForm {% if error %} <p> Error: </p> {{error}} {% endif %} <form method="POST" action="{{url_for('index')}}"> {{ form.csrf_token }} {{ form.startdate.label }} {{ form.startdate }} {{ form.enddate.label }} {{ form.enddate }} <input type="submit" value="Submit"> </form> </body> </html> |