我有一个WT表单,它需要从前端输入数据。目前,表单允许用户输入所有日期,但由于我正在创建一个只允许输入未来日期的网站,我想在此添加一个验证程序,以不允许输入过去的日期
我已经看了前面的问题,但是,它们并没有很大的帮助
下面是my forms.py中的一节
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField, DateField
from wtforms.validators import DataRequired
from wtforms.ext.sqlalchemy.fields import QuerySelectField
from ..models import TasterDay, Course
class TasterDayForm(FlaskForm):
"""
Form for admin to add or edit a taster day
"""
name = StringField('Name', validators=[DataRequired()])
date = DateField('Date (DD-MM-YYYY)', format='%d-%m-%Y')
course = StringField('Course', validators=[DataRequired()])
lecturer = StringField('Lecturer', validators=[DataRequired()])
description = StringField('Description', validators=[DataRequired()])
submit = SubmitField('Submit')
下面是my views.py文件中的一个部分,其中显示了一些路线
from flask import abort, flash, redirect, render_template, url_for
from flask_login import current_user, login_required
from . import admin
from .forms import TasterDayForm, StudentAssignForm, CourseForm
from .. import db
from ..models import TasterDay, Course, Student
def check_admin():
"""
Prevent non-admins from accessing the page
"""
if not current_user.is_admin:
abort(403)
# TasterDay Views
@admin.route('/tasterdays', methods=['GET', 'POST'])
@login_required
def list_tasterdays():
"""
List all tasterdays
"""
check_admin()
tasterdays = TasterDay.query.all()
return render_template('admin/tasterdays/tasterdays.html',
tasterdays=tasterdays, title="TasterDay")
@admin.route('/tasterdays/add', methods=['GET', 'POST'])
@login_required
def add_tasterdays():
"""
Add a Tasterday to the database
"""
check_admin()
add_tasterdays = True
form = TasterDayForm()
if form.validate_on_submit():
tasterdays = TasterDay(name=form.name.data,
description=form.description.data,
date=form.date.data,
course=form.course.data,
lecturer=form.lecturer.data)
try:
# add tasterday to the database
db.session.add(tasterdays)
db.session.commit()
flash('You have successfully added a new Taster Day.')
except:
# in case tasterday already exists
flash('Error: Taster Day already exists.')
# redirect to tasterdays page
return redirect(url_for('admin.list_tasterdays'))
# load tasterdays template
return render_template('admin/tasterdays/tasterday.html', action="Add",
add_tasterdays=add_tasterdays, form=form,
title="Add Taster Day")
@admin.route('/tasterdays/edit/<int:id>', methods=['GET', 'POST'])
@login_required
def edit_tasterdays(id):
"""
Edit a TasterDay
"""
check_admin()
add_tasterdays = False
tasterdays = TasterDay.query.get_or_404(id)
form = TasterDayForm(obj=tasterdays)
if form.validate_on_submit():
tasterdays.name = form.name.data
tasterdays.description = form.description.data
tasterdays.date = form.date.data
tasterdays.course = form.course.data
tasterdays.lecturer = form.lecturer.data
db.session.commit()
flash('You have successfully edited the TasterDay.')
# redirect to the tasterdays page
return redirect(url_for('admin.list_tasterdays'))
form.description.data = tasterdays.description
form.name.data = tasterdays.name
form.date.data = tasterdays.date
form.course.data = tasterdays.course
form.lecturer.data = tasterdays.lecturer
return render_template('admin/tasterdays/tasterday.html', action="Edit",
add_tasterdays=add_tasterdays, form=form,
tasterdays=tasterdays, title="Edit TasterDay")
请有人解释一下我需要添加什么来确保表单中不能输入过去的日期,如果是,则抛出一个错误
多谢各位
我自己设法找到了答案
我将
import datetime
添加到我的forms.py
页面的顶部就在我的
class TasterDayForm(FlaskForm):
下面我补充说:
这是可行的,如果用户输入的日期已过,则会抛出一个错误
相关问题 更多 >
编程相关推荐