sqlalchemy.exc.OperationalError:(sqlite3.OperationalError)没有这样的列:user.name

2024-10-06 11:29:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我在youtube教程的帮助下创建了这个flask博客。我已经可以创建一个用户名等,但当我试图添加名称部分,它给我这个错误

我不需要做这些吗?(稍后我将修复html内容。) 顺便说一句,当我删除这些“名称”部分,它的工作没有任何错误

这是来自users/forms.py的


class RegistrationForm(FlaskForm):
    name=  StringField("name", validators=[DataRequired(), Length(min=2, max=20)])

    username = StringField("username", validators=[DataRequired(), Length(min=2, max=20)])

    email = StringField("Email", validators=[DataRequired(), Email()])

    password = PasswordField("Şifre", validators=[DataRequired(), Length(min=4, max=50)])

    confirm_password = PasswordField("Şifreyi onayla", validators=[DataRequired(), Length(min=4, max=50), EqualTo("password")])

    submit = SubmitField("Kayıt Ol")
 
    def validate_username(self, username): #database de bu kullunaci varmi onu kontrol ediy
        user= User.query.filter_by(username=username.data).first()
        if user:
            raise ValidationError("bu kullanici adi daha onceden alinmis.")

    def validate_email(self, email): #database de bu kullunaci varmi onu kontrol ediy
        user= User.query.filter_by(email=email.data).first()
        if user:
            raise ValidationError("bu email daha onceden kullanilmis.")

这是来自users/routes.py的

@users.route("/register", methods=["GET", "POST"]) #burda methodlari eklemezsek method not allowed error u verecek. tekrar bi bak buna
def register():
    if current_user.is_authenticated:
        return redirect(url_for('main.home'))
    form = RegistrationForm()
    if form.validate_on_submit():
        hashed_password = bcrypt.generate_password_hash(form.password.data).decode('utf-8') #form.password.data girilen sifre ilk kismi tekrar check btw.hashed_password = bcrypt.generate_password_hash fln.
        user = User(name=form.name.data, username=form.username.data, email=form.email.data, password=hashed_password) #creating user. user=User()i grasp well.
        db.session.add(user)
        db.session.commit()
        flash('Hesabiniz olusturuldu. Giris yapabilirsiniz.', 'success') #success bootstrap seysi
        return redirect(url_for("users.login")) #home burda route daki function un adi
    return render_template("register.html", title="Kayıt Ol", form=form)

这是来自users/models.py的


class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True) #primary_key=true a uniqie id for user.....
    name = db.Column(db.String(20), nullable=False)
    username = db.Column(db.String(20), unique=True, nullable=False) #string 20 olmasinin nedeni max username.. uniqie olmasi da abvious zati... nulable=false da null olmasini engeller usernamin
    email = db.Column(db.String(120), unique=True, nullable=False)
    image_file = db.Column(db.String(20), nullable=False, default="default.jpg")
    password = db.Column(db.String(60), nullable=False)
    posts = db.relationship('Post', backref='author', lazy=True) #check again 

Tags: nameformdbdatastringemailusernamecolumn