用于捕获日期的Python表单&;炼金术时间到了
我试图使用python和flask中的wtf_表单让用户输入日期和时间,然后将其保存到Sqlalchemy。我将分享我所拥有的,但现在我的烧瓶表单一旦填充,当我提交表单时,将不接受日期条目。它没有给我任何错误,所以我确信它是不匹配的。任何想法都非常感谢。非常感谢你的帮助。我目前正在使用SQLite作为我的数据库用于捕获日期的Python表单&;炼金术时间到了,python,flask,flask-sqlalchemy,flask-wtforms,Python,Flask,Flask Sqlalchemy,Flask Wtforms,我试图使用python和flask中的wtf_表单让用户输入日期和时间,然后将其保存到Sqlalchemy。我将分享我所拥有的,但现在我的烧瓶表单一旦填充,当我提交表单时,将不接受日期条目。它没有给我任何错误,所以我确信它是不匹配的。任何想法都非常感谢。非常感谢你的帮助。我目前正在使用SQLite作为我的数据库 class Events(db.Model): __tablename__ = 'events' id = db.Column(db.Integer, primary_
class Events(db.Model):
__tablename__ = 'events'
id = db.Column(db.Integer, primary_key=True)
eventname = db.Column(db.Text(64))
eventstart = db.Column(db.DateTime, nullable=False)
eventstop = db.Column(db.DateTime, nullable=False)
def __init__(
self, eventname, eventstart, eventstop
):
self.eventname = eventname
self.eventstart = eventstart
self.eventstop = eventstop
我的forms.py是:
# /myproject/events
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField, IntegerField
from wtforms.validators import DataRequired
from wtforms.fields import DateField
# Building the form in order to get a date picker and save it to the database.
class RegistrationForm(FlaskForm):
eventname = StringField('Event Name', validators=[DataRequired()])
eventstart = DateField(
'Enter start date and time', id='datepick', validators=[DataRequired()]
)
eventstop = DateField(
'Enter end date and time', id='datepick', validators=[DataRequired()]
)
submit = SubmitField('Register!')
My view.py是:
from myproject import app, db
from flask import (
render_template, redirect, url_for, flash,
Blueprint, request
)
from flask_login import login_user, login_required, logout_user
from myproject.models import Events
from myproject.events.forms import RegistrationForm
import validators
from flask_bootstrap import Bootstrap
Bootstrap(app)
events_blueprint = Blueprint(
'events', __name__,
template_folder='templates/events'
)
# @login_required
@events_blueprint.route('/add', methods=['GET', 'POST'])
def register():
try:
form = RegistrationForm()
if form.validate_on_submit():
event = Events(
eventname=form.eventname.data,
eventstart=form.eventstart.data,
eventstop=form.eventstop.data,
)
db.session.add(event)
db.session.commit()
flash("Thank you for registering your event.")
return redirect(url_for('list_event'))
return render_template('add.html', form=form)
except Exception as e:
print(e)
最后,我的HTML是:
{% extends "bootstrap/base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block title %}This is an example page{% endblock %}
{% block head %}
{{ super() }}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/css/bootstrap-datetimepicker.min.css">
{% endblock %}
{% block content %}
<div class="container">
<h1>Hello, Bootstrap</h1>
<div class="row">
<div class='col-sm-6'>
<form method="POST">
{{form.hidden_tag()}}
{{form.eventname.label}}{{form.eventname()}}<br><br>
{{form.eventstart.label}}{{form.eventstart()}}<br><br>
{{form.eventstop.label}}{{form.eventstop()}}<br><br>
{{form.submit()}}
</form>
</div>
</div>
</div>
{% endblock %}
{% block scripts %}
{{ super() }}
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/js/bootstrap-datetimepicker.min.js"></script>
<script type="text/javascript">
$(function () {
$('#datepick').datetimepicker();
});
</script>
{% endblock %}
{%extends“bootstrap/base.html”%}
{%import“bootstrap/wtf.html”作为wtf%}
{%block title%}这是一个示例页面{%endblock%}
{%block head%}
{{super()}}
{%endblock%}
{%block content%}
你好,Bootstrap
{{form.hidden_tag()}}
{{form.eventname.label}{{form.eventname()}}
{{form.eventstart.label}{{form.eventstart()}}
{{form.eventstop.label}{{form.eventstop()}}
{{form.submit()}}
{%endblock%}
{%block scripts%}
{{super()}}
$(函数(){
$('#datepick')。datetimepicker();
});
{%endblock%}
如果没有错误,您如何知道在提交表单时它不接受日期条目?好问题。我将尝试插入一个if-print语句,看看它是否失败,然后了解它失败的字段。你将如何着手找出错误呢?非常感谢。在您的控制台/终端中,我没有让它在if表单之后打印。请在提交()时进行验证:
,这意味着它没有进行验证。如何更好地解决验证问题?谢谢。尝试在view.py文件中用Try-catch块包围register函数。让我们看看是否有任何异常(请记住将异常与catch exception一起打印为e:print(e)