问题描述
以下代码可在my project中找到:
flaskblog/
/users
/forms.py
class UpdateAccountForm(FlaskForm):
## ERROR ##
'nonetype' object has no attribute 'username'
但它应该具有current_user:
User('test1','test1@test.com','fdd6f1e03J3fc6a4.jpg')
Traceback (most recent call last):
File "run.py",line 1,in <module>
from flaskblog import app
File "/home/ali/flask/flask_project2/Flask_Blog/flaskblog/__init__.py",line 20,in <module>
from flaskblog import routes # here because preventional of circular import.
File "/home/ali/flask/flask_project2/Flask_Blog/flaskblog/routes.py",line 3,in <module>
from flaskblog.forms import RegistrationForm,LoginForm,UpdateAccountForm
File "/home/ali/flask/flask_project2/Flask_Blog/flaskblog/forms.py",line 40,in <module>
class UpdateAccountForm(FlaskForm):
File "/home/ali/flask/flask_project2/Flask_Blog/flaskblog/forms.py",line 43,in UpdateAccountForm
render_kw={"value":current_user.username.data})
File "/home/ali/flask/flask_project2/venv/lib/python3.8/site-packages/werkzeug/local.py",line 347,in __getattr__
return getattr(self._get_current_object(),name)
AttributeError: 'nonetype' object has no attribute 'username'
USERS / forms.py
from flask_wtf import FlaskForm
from flask_wtf.file import FileField,FileAllowed
from wtforms import StringField,PasswordField,SubmitField,BooleanField
from wtforms.validators import Datarequired,Length,Email,EqualTo,ValidationError,Optional
from flaskblog.models import User
from flask_login import current_user
class UpdateAccountForm(FlaskForm):
username = StringField('Username',validators=[Datarequired(),Length(min=2,max=20)],render_kw={"value":current_user.username.data})
submit = SubmitField('Update')
def validate_username(self,username):
if username.data != current_user.username:
user = User.query.filter_by(username=username.data).first()
if user:
raise ValidationError('That username is taken. Please choose a different one.')
def validate_email(self,email):
if email.data != current_user.email:
user = User.query.filter_by(email=email.data).first()
if user:
raise ValidationError('That email is taken. Please choose a different one.')
FLASKBLOG / models.py
# models.py
class User(db.Model,UserMixin):
id = db.Column(db.Integer,primary_key=True)
username = db.Column(db.String(20),unique=True,nullable=False)
email = db.Column(db.String(120),nullable=False)
image_file = db.Column(db.String(20),nullable=False,default='default.png')
password = db.Column(db.String(60),nullable=False) # we will hash passwords
posts = db.relationship('Post',backref='author',lazy=True) # upper case because it hints to a "class"
def get_reset_token(self,expires_sec=1800):
s = Serializer(current_app.secret_key,expires_sec)
# s = Serializer(app.config['SECRET_KEY'])
return s.dumps({'user_id' : self.id}).decode('utf-8') # generats token
对不起,如果我在英语上有错误:)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)