Я следую учебнику Flask-WTF а>
Теперь мой вопрос: как я могу отобразить ввод, который пользователь вводит в contact.html, и отобразить его в info.html с помощью SQLALCHEMY? Я использую form.populate_obj(), но не знаю, работает он или нет, и это то, что я делал до сих пор. информация.html
#this is routs.py
from flask import Flask, render_template, url_for, request, flash
from form import LoginForm
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask (__name__)
app.secret_key = 'pegahpegah'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////test.db'
db = SQLAlchemy(app)
@app.route('/')
def home():
return render_template('home.html')
@app.route('/about')
def about():
return render_template('about.html')
@app.route('/contact', methods=['GET', 'POST'])
def contact():
form = LoginForm()
if request.method == 'POST':
if form.validate()== True:
newcontact = Contact(name=form.name,
email=form.email,
subject=form.subject,
message=form.message)
try:
db.session.add(newcontact)
db.session.commit()
flash('Contact commited to database')
return redirect(flask.url_for('info'))
except:
#Something went wrong when trying to add to the database.
flash('Could not commit new contact')
else: #If the form does not have all fields that are required
flash('All fields are required.')
return render_template('contact.html', form=form)
@app.route('/info', methods=['GET', 'POST'])
def info():
form = LoginForm()
contactinfo = Contact.query.first()
#Populate the form
form.name = contactinfo.name
form.email = contactinfo.email
form.subject = contactinfo.subject
form.message = contactinfo.message
#returns the html page, along with the form
return render_template('info.html', form=form)
if __name__ == '__main__':
app.run(debug=True)
form.py
from flask.ext.wtf import Form
from wtforms import StringField, SubmitField, validators, ValidationError
from wtforms.validators import DataRequired
class LoginForm(Form):
name = StringField("Name", [validators.Required("Please enter your name.")])
email = StringField("Email",
[validators.Required("Please enter your email address."),
validators.Email("Please enter valid email address.")])
subject = StringField("Subject",
[validators.Required("Please enter your subject.")])
message = StringField("Message",
[validators.Required("Please enter your message.")])
submit = SubmitField("Submit")
модель.py
from flask.ext.sqlalchemy import SQLAlchemy
from routs import db
class Contact(db.Model):
__tablename__ = "Contact"
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(50))
email = db.Column(db.String(50))
subject = db.Column(db.String(50))
message = db.Column(db.String(50))
def __init__(self, name, email, subject, ):
self.name = name
self.email = email
self.subject = subject
self.message = message
def __repr__(self):
return '<ContactForm %r>' % (self.message)
информация.html
{% extends "layout.html" %}
{% block content %}
<h2>show the info</h2>
{% for entry in form %}
<strong>name:</strong> {{ entry.name}} <br>
<strong>email:</strong> {{ entry.email }} <br>
<strong>subject</strong> {{ entry.subject }} <br>
<strong>messaget</strong> {{ entry.message }} <br>
<br>
{% endfor %}
{% endblock %}
контакт.html
{% extends "layout.html" %}
{% block content %}
<h2>Contact</h2>
{% for message in form.name.errors %}
<div class="flash">{{ message }}</div>
{% endfor %}
{% for message in form.email.errors %}
<div class="flash">{{ message }}</div>
{% endfor %}
{% for message in form.subject.errors %}
<div class="flash">{{ message }}</div>
{% endfor %}
{% for message in form.message.errors %}
<div class="flash">{{ message }}</div>
{% endfor %}
<form action="{{url_for('contact')}}" method=post>
{{ form.hidden_tag() }}
{{ form.name.label }}
{{ form.name }}
{{ form.email.label }}
{{ form.email }}
{{ form.subject.label }}
{{ form.subject }}
{{ form.message.label }}
{{ form.message}}
{{form.submit}}
</form>
{% endblock %}
когда я нажимаю «Отправить», и все формы действительны, ничего не происходит, и он не ведет к информации, и не показывает флэш-память, и если я пытаюсь открыть info.html AttributeError
AttributeError: тип объекта «LoginForm» не имеет атрибута «запрос»