烧瓶形式current_user NoneType

时间:2020-09-01 10:09:41

标签: python flask 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), unique=True, 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

对不起,如果我在英语上有错误:)

0 个答案:

没有答案