gpt4 book ai didi

python - 属性错误 : 'EditForm' object has no attribute 'validate_on_submit'

转载 作者:太空狗 更新时间:2023-10-29 20:43:47 25 4
gpt4 key购买 nike

我有一个小型编辑应用程序,其中包含以下文件。当我提交表单时,它显示 AttributeError: 'EditForm' object has no attribute 'validate_on_submit' 谁能告诉我这是什么问题?

表单.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 %}

最佳答案

您导入了错误的 Form 对象:

from flask.ext.wtf import Form
from wtforms import Form, TextField, BooleanField, PasswordField, TextAreaField, validators

第二个导入行从 wtforms 导入 Form,替换从 flask_wtf 导入。从第二个导入行中删除 Form(并将您的 flask.ext.wtf 导入更新为 flask_wtf to remain future-proof ):

from flask_wtf import Form
from wtforms import TextField, BooleanField, PasswordField, TextAreaField, validators

两个附加说明:

  1. 表单将为您从请求中获取值,无需传入 request.form

  2. validate_on_submit() 也对请求方法进行测试,无需您自己执行。

以下就足够了:

@app.route('/edit', methods = ['GET', 'POST'])
def edit():
form = EditForm()

if form.validate_on_submit():

截至Flask-WTF version 0.13 (发布于 2016/09/29),正确使用的对象命名为 FlaskForm,以便更容易区分它和 wtforms Form 类(class):

from flask_wtf import FlaskForm

关于python - 属性错误 : 'EditForm' object has no attribute 'validate_on_submit' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22873794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com