2016-11-05 18 views
0

ので、私はこのエラーに'NoneType'オブジェクトには属性 'username'がありませんか?

はAttributeErrorを得た: 'NoneType' オブジェクトが属性 'ユーザ名'

任意の提案、

を持っていないModels.py

class User(db.Model): 
    __tablename__ = "users" 
    id = db.Column(db.Integer, primary_key=True) 
    username = db.Column(db.String(80), unique=True) 
    password = db.Column(db.String(20), unique=True) 


    def __init__(self, username, password): 
     self.username = username 
     self.password= bcrypt.generate_password_hash(password, 10) 




    def is_authenticated(self): 
     return True 


    def is_active(self): 
     return True 

    def is_anonymous(self): 
     return False 

    def get_id(self): 
     return (self.id) 


    def __repr__(self): 
     return '<User %r>' % self.username 

Views.py

@app.route('/register', methods=['GET','POST']) 
def register(): 
    if request.method == 'GET': 
     return render_template('register.html') 
    user = User(request.form['username'] , request.form['password']) 
    username = request.form['username'] 
    password = request.form['password'] 
    storeduser = User.query.filter_by(username=username).first() 
    if storeduser.username is not None and storeduser.username == request.form['username']: 
     return 'User already Exist !' 
    else: 
     db.session.add(user) 
     db.session.commit() 
     flash('User successfully registered') 
     return redirect(url_for('index')) 

クライアントのユーザー名が現在のユーザー名の出力とほぼ同じ場合 登録ユーザー名でない場合は、既存のユーザーが登録されています。

(あなたは不思議に思った場合は)私のモデルに自分のユーザー名を参照イム

+0

'User.query.filter_by(username = username).first()'クエリは、ユーザーが見つからなかったことを意味する 'None'を返しました。コードは、私が同じユーザー名を入れたときにすでに存在 ユーザーをレンダリングすることができたので、私はちょっと は、私はそれがusenameを追加し、インデックスページにリダイレクト作るのですか、理解しない –

+0

? –

答えて

1

User.query.filter_by(username=username).first()クエリは、ユーザーが見つかりませんでした意味、Noneを返しました。

あなたはstoreduser.usernamestoreduserは最初Noneないかどうかをテストする必要はありません。

if storeduser is not None and storeduser.username == request.form['username']: 
    return 'User already Exist !' 

あなたは後者の試験が冗長であるrequest.form['username']に照会するので、あなただけの、本当に使用する必要があります。

if storeduser is not None: 
    return 'User already Exist !' 
+0

私は、私は、ユーザーが別のユーザー名ではなく、登録ユーザーにサインアップできることを確認し storeduser ==のRequest.Form [「ユーザ名」] どうかを指定しますどのようにこのに行くマルタイン –

+0

を与えてみましょうか? あなたは何を意味するのか知っていますか? –

+0

@EliHood:あなたはする必要はありません。 'storeduser'が' None'でなければ、データベースから結果が得られます。フォームに与えられた 'username'の値が同じであれば、それだけが発生します。だから 'もしstoreduserがNoneでないなら' *十分な*ここに。 –

関連する問題