烧瓶形式current_user NoneType

问题描述

以下代码可在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 (将#修改为@)