validator - wtform python
AttributeError: el objeto ''EditForm'' no tiene el atributo ''validate_on_submit'' (1)
Tengo una pequeña aplicación de edición con los siguientes archivos. Cuando presento el formulario, me muestra AttributeError: el objeto ''EditForm'' no tiene atributo ''validate_on_submit'' ¿Alguien puede decirme cuál es el problema?
forms.py
from flask.ext.wtf import Form
from wtforms import Form, TextField, BooleanField, PasswordField, TextAreaField, validators
from wtforms.validators import Required
class EditForm(Form):
"""edit user Profile EditForm"""
username = TextField(''username'', [validators.Length(min=3, max=50), validators.Required()])
email = TextField(''email'', [validators.Length(min=5, max=100), validators.Email, validators.Required()])
password = PasswordField(''password'', [validators.Required()])
age = TextField(''age'', [validators.Length(min=1, max=3), validators.Required()])
about_user = TextAreaField(''about_user'', [validators.Length(max=500)])
img_url = TextField(''img_url'')
views.py
from flask import render_template, url_for, flash, g, redirect, session, request
from flask.ext.login import login_user, logout_user, current_user, login_required
from forms import LoginForm, RegisterForm, EditForm
@app.route(''/edit'', methods = [''GET'', ''POST''])
def edit():
form = EditForm(request.form)
if request.method == ''POST'' and form.validate_on_submit():
g.user.username = form.data.username
g.user.email = form.data.email
g.user.age = form.data.age
g.user.img_url = form.data.img_url
g.user.about_user = form.data.about_user
db.session.add(g.user)
db.session.commit()
flash(''Your changes saved successfully'')
return redirect(url_for(''edit''))
else:
form.data.username = g.user.username
form.data.email = g.user.email
form.data.age = g.user.age
form.data.img_url = g.user.img_url
form.data.about_user = g.user.about_user
return render_template(''edit.html'',
title = ''Edit Profile'',
form = form)
edit.html
{% extends "base.html" %}
{% block content %}
<div>
<form action="" method="post" name="edit">
<table>
<tr>
<td>Username</td>
<td>{{ form.username }}</td>
</tr>
<tr>
<td>E-mail</td>
<td>{{ form.email }}</td>
</tr>
<tr>
<td>Age</td>
<td>{{ form.age }}</td>
</tr>
<tr>
<td>Choose Avatar</td>
<td>{{ form.img_url }}</td>
</tr>
<tr>
<td>About me</td>
<td>{{ form.about_user(cols = 50, rows = 5) }}</td>
</tr>
<tr>
<td></td>
<td><input type="submit" name="submit" value="Save changes"/></td> </tr>
</table>
</form>
</div>
{% endblock %}
Importó el objeto Form
incorrecto:
from flask.ext.wtf import Form
from wtforms import Form, TextField, BooleanField, PasswordField, TextAreaField, validators
La segunda línea de importación importa Form
de wtforms
, reemplazando la importación de flask_wtf
. Quite el Form
de la segunda línea de importación (y actualice su flask.ext.wtf
import a flask_wtf
para permanecer a prueba del futuro ):
from flask_wtf import Form
from wtforms import TextField, BooleanField, PasswordField, TextAreaField, validators
Dos notas adicionales:
El formulario tomará valores de la solicitud por usted, no es necesario pasar en
request.form
.validate_on_submit()
prueba también para el método de solicitud, no es necesario que lo haga usted mismo.
Lo siguiente es suficiente:
@app.route(''/edit'', methods = [''GET'', ''POST''])
def edit():
form = EditForm()
if form.validate_on_submit():