ОК, пожалуйста, помогите. Я дергаю себя за волосы, хотя знаю, что ответ ДОЛЖЕН быть чем-то простым.
В моем проекте веб-интерфейса Flask -SQLAlchemy есть две формы: Post и Survey.
Сообщение было первой страницей, которую я создал, чтобы убедиться, что я могу эффективно писать в базу данных. Он расположен на главной странице / странице индекса. Ведение журнала данных с домашней страницы с использованием класса Post - это то, что я могу успешно сделать.
После создания Post я захотел создать свою первую форму для своего проекта. Эта форма / класс называется Survey. Таблица опросов существует в моей базе данных; Я успешно создал все нужные мне столбцы и перенес таблицу. Я также могу увидеть Опрос на моей веб-странице.
Итак, давайте перейдем к опросу, и, конечно же, моя форма там.
Отлично. Хорошо, теперь давайте добавим некоторые данные.
Я нажимаю "Отправить", и веб-страница автоматически возвращается на домашний / индексный экран с флагом sh сообщение «Ваше сообщение сейчас в сети!», отправленное из формы «Пост», а не формы «Опрос». В терминале появляется следующий код:
127.0.0.1 - - [24/Jan/2020 14:59:40] "POST / HTTP/1.1" 302 -
127.0.0.1 - - [24/Jan/2020 14:59:40] "GET /index HTTP/1.1" 200 -
Что похоже на вывод, который я получаю, когда использую форму Post. Тем не менее, ничего не было сохранено в моей таблице Survey в базе данных.
>>> Survey.query.all()
[]
Я могу добавлять вещи в свою таблицу Post, пока у меня не посинет лицо, но таблица Survey, похоже, не работает , Теперь я уверен, что это что-то глупое. Например, мне нужно по-другому пометить свои кнопки отправки, или, возможно, у меня не должно быть формы на странице индекса, если я хочу использовать другие формы, или я пропустил привязку кода обратно к домашней странице, КУДА-ТО, хотя я искал этот код в течение нескольких дней, и я не могу его найти.
Помогите? Моя конечная игра - добавить много этих таблиц, чтобы помочь управлять довольно здоровенной базой данных с множеством таблиц и взаимосвязей. Я не могу сказать, что я полон уверенности, если мне не удастся получить две формы для хорошей игры.
Большая часть кода входа была удалена снизу, так как это работает просто хорошо.
__ init__py:
from flask import Flask, render_template, request, redirect
from config import Config
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_login import LoginManager
app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)
migrate=Migrate(app,db)
login = LoginManager(app)
login.login_view = 'login'
from app import routes, models
forms.py:
from flask_wtf import FlaskForm
from wtforms import StringField,PasswordField,BooleanField,SubmitField, TextAreaField, DateField
from wtforms.validators import DataRequired, Length
class PostForm(FlaskForm):
post = TextAreaField('Say something')
submit = SubmitField('Submit')
class SurveyForm(FlaskForm):
surveyname=StringField('Survey Name', validators=[DataRequired()])
surveycode=StringField('Survey Code', validators=[DataRequired()])
embark=DateField('Date Embark: format=yyyy-mm-dd')
dock=DateField('Date Return: format=yyyy-mm-dd')
vessel=StringField('Vessel Name')
submit=SubmitField('Submit')
rout.py:
from flask import render_template, flash, request, redirect, url_for
from flask_sqlalchemy import SQLAlchemy
from flask_login import current_user, login_user, logout_user, login_required
from werkzeug.urls import url_parse
from app import app, db
from app.models import User, Post, Survey
from app.forms import LoginForm, PostForm, SurveyForm
@app.route('/', methods=['GET','POST'])
@app.route('/index',methods=['GET','POST'])
@login_required
def index():
form=PostForm()
if form.validate_on_submit():
post=Post(body=form.post.data, author=current_user)
db.session.add(post)
db.session.commit()
flash('Your post is now live!')
return redirect(url_for('index'))
return render_template('index.html', title='Home',form=form)
@app.route('/survey', methods=["GET","POST"])
def survey():
form=SurveyForm(request.form)
if form.validate_on_submit():
survey=Survey(surveyname=form.surveyname.data,
surveycode=form.surveycode.data,
embark=form.embark.data,
dock=form.dock.data,
vessel=form.vessel.data)
db.session.add(survey)
db.session.commit()
return redirect(url_for('survey'))
return render_template('survey.html', title='Survey', form=form)
models.py:
from datetime import datetime
from app import db, login
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
body = db.Column(db.String(140))
timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
def __repr__(self):
return '<Post {}>'.format(self.body)
class Survey(db.Model):
id = db.Column(db.Integer, primary_key=True)
surveyname = db.Column(db.String(140), nullable=False)
surveycode = db.Column(db.String(140), nullable=False)
embark = db.Column(db.DateTime, default=datetime.utcnow)
dock = db.Column(db.DateTime, default=datetime.utcnow)
vessel = db.Column(db.String(140))
def __repr__(self):
return '<Survey {}>'.format(self.surveycode)