首页 > 解决方案 > 数据尚未插入通过 WTForms 收集的数据库

问题描述

我是烧瓶和烧瓶-sqlalchemy 的新手。问题是通过 wtforms 输入新记录(地点)时,闪烁消息闪烁成功,但是,数据未插入数据库。我需要你的帮助。

POST 路径: import json import dateutil.parser import babel from flask import Flask, render_template, request, Response, flash, redirect, url_for from flask_moment import Moment from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate import logging from logging import Formatter, FileHandler from flask_wtf import FlaskForm from forms import * from models import db, Venue, Artist, Show import sys

app = Flask(__name__)
moment = Moment(app)
app.config.from_object('config')

# TODO: connect to a local postgresql database

db.init_app(app)
migrate = Migrate(app, db)
@app.route('/venues/create', methods=['POST'])
def create_venue_submission():
  error = False
  form = VenueForm()
  if form.validate_on_submit():
    venue=Venue(name=form.name.data,
                city=form.city.data,
                state=form.state.data,
                address=form.address.data,
                phone=form.phone.data,
                image_link=form.image_link.data,
                genres=form.genres.data,
                facebook_link=form.facebook_link.data)
    form.populate_obj(venue)
    db.session.add(venue)
    db.session.commit()
    return redirect(url_for('forms/new_venue.html'))
  if not error:
    flash('Venue ' + request.form['name'] + ' was successfully listed!')
  if error:
  # TODO: on unsuccessful db insert, flash an error instead.
    flash('An error occurred. Venue ' + request.form['name'] + ' could not be listed.')
  return render_template('pages/home.html', form=form)

模型代码片段:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

db = SQLAlchemy()
class Venue(db.Model):
__tablename__ = 'venues'

id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String, nullable=False)
city = db.Column(db.String(120), nullable=False)
state = db.Column(db.String(120), nullable=False)
address = db.Column(db.String(120), nullable=False)
phone = db.Column(db.String(120))
facebook_link = db.Column(db.String(120))
website = db.Column(db.String(120))
    
def __repr__(self):
  return f'<Venue id: {self.id}, name: {self.name}>'

后台成功消息:

后端状态码

前端成功消息: 前端闪现消息

数据库状态:

数据库状态

这非常令人困惑,无法找到问题所在。

标签: flaskflask-sqlalchemyflask-wtforms

解决方案


你的代码永远不会失败你的错误检查——你error=False在函数的顶部设置了,但你的函数中没有代码可以将它翻转到error=True,所以if not error:总是会运行,发送一条成功的消息。

我怀疑,没有看到您的代码,表单验证失败(如果您是新手,您可能忘记了{{ form.hidden_tag() }}表单模板中的


推荐阅读