Flask self.errors.append()-AttributeError:“ tuple”对象没有属性“ append” [英] Flask self.errors.append() - AttributeError: 'tuple' object has no attribute 'append'
本文介绍了Flask self.errors.append()-AttributeError:“ tuple”对象没有属性“ append”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
当我尝试按用户验证提交的数据并检查输入的电子邮件是否存在时,我的小型注册应用程序给出错误提示。
这是我的文件:
表格:
<从flask.ext.wtf导入pre>
从wtforms导入表单
从wtforms导入TextField,BooleanField,PasswordField,TextAreaField,验证器
从wtforms.validators导入所需的
从应用程序导入模型
类RegisterForm(Form):
从用户中检索数据所需的RegisterForm类
username = TextField('username',[validators。长度(最小= 3,最大= 50),验证器。(必填()))
email = TextField(电子邮件,[验证器。长度(最小3,最大= 100),验证器。必填()] )
密码= 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')
def email_unique(self,email):
if models.User.query.filter_by(email = email).first()!= None:
self.email.erro rs.append(’此电子邮件地址已被使用。请选择另一个。')
return False
观看次数:
#!flask / bin / python
来自应用程序导入应用程序,db,lm
来自烧瓶导入render_template,url_for,flash,g,重定向,会话,从flask.ext.login请求
导入表单中的login_user,logout_user,current_user,login_required
从模型中导入LoginForm,RegisterForm,EditForm
导入用户
@ app.route('/ register',方法= ['GET','POST'])
def register():
形式= RegisterForm()
#使用户名唯一
u_unique = form.username.data
u_unique = User.unique_username(u_unique)
#验证电子邮件地址并检查其是否已存在是否
form.email_unique(form.email.data)
if form.validate_on_submit():
user = User(
u_unique,
form .password.data,
form.email.data,
form.age.data,
form.about_user.data,
form.img_url.data)
db.session.add(user)
db.session.commit()
flash('谢谢您的注册')
flash('您的用户名是:'+ str(u_unique))
return redirect(url_for('login'))
else :
for form.errors错误:
flash(error)
return render_template('register.html',
title ='Registeration',
形式=形式)
错误是:
跟踪(最近一次通话最近)文件< br> /home/maksad/Desktop/faskMonkey/flask/lib/python2.7/site-packages/flask/app.py,第1701行,位于__call__中return self.wsgi_app(environ,start_response)
File / wsgi_app响应= self.make_response(self.handle_exception(e))中的home / maksad / Desktop / faskMonkey / flask / lib / python2.7 / site-packages / flask / app.py行1689
文件 /home/maksad/Desktop/faskMonkey/flask/lib/python2.7/site-packages/flask/app.py,第1687行,在wsgi_app响应= self.full_dispatch_request()
文件中, / home / maksad / Desktop / faskMonkey / flask / lib / python2.7 / site-packages / flask / app.py,第1360行,在full_dispatch_request中rv = self.handle_user_exception(e)
File / home / maksad / Desktop /faskMonkey/flask/lib/python2.7/site-packages/flask/app.py,第1358行,在full_dispatch_request中rv = self.dispatch_request()
文件 / home / maksad / Desktop / faskMonkey / flask /lib/python2.7/site-packages/flask/app.py,第1344行,在dispatch_request中返回self.view_functions [rule.endpoint](** req.view_args)
文件 / hom e / maksad / Desktop / faskMonkey / app / views.py,第92行,以注册表格显示。email_unique(form.email.data)
文件 /home/maksad/Desktop/faskMonkey/app/forms.py ,第26行,在email_unique
self.email.errors.append('中,此电子邮件地址已被使用。请选择另一个。')
AttributeError:'tuple'对象没有属性'append'
解决方案
元组
对象无法添加。而是使用 list()
转换为列表,然后追加并转换回原样,例如:
>> obj1 =(6,1,2,6,3)
>> obj2 = list(obj1)#转换为列表
>>> obj2.append(8)
>> print obj2
[6,1,2,6,3,8]
>> obj1 = tuple(obj2)#转换回元组
>>>打印obj1
(6、1、2、6、3、8)
希望如此帮助!
My small registration app gives and error when I try to validate the submited data by user and check if the entered e-mail exists.
here is my files:
forms:
from flask.ext.wtf import Form
from wtforms import TextField, BooleanField, PasswordField, TextAreaField, validators
from wtforms.validators import Required
from app import models
class RegisterForm(Form):
"""RegisterForm class needed for retrieving data from user"""
username = TextField('username', [validators.Length(min=3, max=50), validators.Required()])
email = TextField('email', [validators.Length(min=3, max=100), 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')
def email_unique(self, email):
if models.User.query.filter_by(email = email).first() != None:
self.email.errors.append('This E-mail address is already in use. Please choose another one.')
return False
views:
#!flask/bin/python
from app import app, db, lm
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
from models import User
@app.route('/register', methods = ['GET', 'POST'])
def register():
form = RegisterForm()
#makes the username unique
u_unique = form.username.data
u_unique = User.unique_username(u_unique)
#validates email adress and checks if it already exists or not
form.email_unique(form.email.data)
if form.validate_on_submit():
user = User(
u_unique,
form.password.data,
form.email.data,
form.age.data,
form.about_user.data,
form.img_url.data)
db.session.add(user)
db.session.commit()
flash('Thank you for your registration')
flash('Your username is: ' + str(u_unique))
return redirect(url_for('login'))
else:
for error in form.errors:
flash(error)
return render_template('register.html',
title = 'Registeration',
form = form)
The error is:
Traceback (most recent call last) File <br> "/home/maksad/Desktop/faskMonkey/flask/lib/python2.7/site-packages/flask/app.py", line 1701, in __call__ return self.wsgi_app(environ, start_response)
File "/home/maksad/Desktop/faskMonkey/flask/lib/python2.7/site-packages/flask/app.py", line 1689, in wsgi_app response = self.make_response(self.handle_exception(e))
File "/home/maksad/Desktop/faskMonkey/flask/lib/python2.7/site-packages/flask/app.py", line 1687, in wsgi_app response = self.full_dispatch_request()
File "/home/maksad/Desktop/faskMonkey/flask/lib/python2.7/site-packages/flask/app.py", line 1360, in full_dispatch_request rv = self.handle_user_exception(e)
File "/home/maksad/Desktop/faskMonkey/flask/lib/python2.7/site-packages/flask/app.py", line 1358, in full_dispatch_request rv = self.dispatch_request()
File "/home/maksad/Desktop/faskMonkey/flask/lib/python2.7/site-packages/flask/app.py", line 1344, in dispatch_request return self.view_functions[rule.endpoint](**req.view_args)
File "/home/maksad/Desktop/faskMonkey/app/views.py", line 92, in register form.email_unique(form.email.data)
File "/home/maksad/Desktop/faskMonkey/app/forms.py", line 26, in email_unique
self.email.errors.append('This E-mail address is already in use. Please choose another one.')
AttributeError: 'tuple' object has no attribute 'append'
解决方案
The tuple
objects cannot append. Instead, convert to a list using list()
, and append, and then convert back, as such:
>>> obj1 = (6, 1, 2, 6, 3)
>>> obj2 = list(obj1) #Convert to list
>>> obj2.append(8)
>>> print obj2
[6, 1, 2, 6, 3, 8]
>>> obj1 = tuple(obj2) #Convert back to tuple
>>> print obj1
(6, 1, 2, 6, 3, 8)
Hope this helps!
这篇关于Flask self.errors.append()-AttributeError:“ tuple”对象没有属性“ append”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文