Flask AttributeError:“LoginForm”对象没有“userEmail”属性

2024-09-29 21:28:11 发布

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

我一直在创建一个基于论坛的学习系统,类似于评估项目的堆栈溢出。我对flask还相当陌生,但我相信我对python有相当的了解。我一直在关注Corey Schafer'sFlask教程,并根据我的项目调整它们。每当我尝试使用数据库中现有的用户名和密码登录到我的系统时,我都会收到以下错误:

"AttributeError: 'LoginForm' object has no attribute 'userEmail'".

回溯:

Traceback (most recent call last):
  File "C:\Users\jmb13\AppData\Roaming\Python\Python37\site-packages\flask\app.py", line 2309, in __call__
    return self.wsgi_app(environ, start_response)
  File "C:\Users\jmb13\AppData\Roaming\Python\Python37\site-packages\flask\app.py", line 2295, in wsgi_app
    response = self.handle_exception(e)
  File "C:\Users\jmb13\AppData\Roaming\Python\Python37\site-packages\flask\app.py", line 1741, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\jmb13\AppData\Roaming\Python\Python37\site-packages\flask\_compat.py", line 35, in reraise
    raise value
  File "C:\Users\jmb13\AppData\Roaming\Python\Python37\site-packages\flask\app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\jmb13\AppData\Roaming\Python\Python37\site-packages\flask\app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\jmb13\AppData\Roaming\Python\Python37\site-packages\flask\app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\jmb13\AppData\Roaming\Python\Python37\site-packages\flask\_compat.py", line 35, in reraise
    raise value
  File "C:\Users\jmb13\AppData\Roaming\Python\Python37\site-packages\flask\app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\jmb13\AppData\Roaming\Python\Python37\site-packages\flask\app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "c:\Users\jmb13\OneDrive\01-A Level Computer Science - Coding Project\Python Files\A-Level-Project\itroom\routes.py", line 17, in login
    user = User.query.filter_by(email=form.userEmail.data).first()
AttributeError: 'LoginForm' object has no attribute 'userEmail'

之后,用户将被直接重定向到主页。我确信这是我为我的登录表单创建的类的问题。感谢您的帮助。登录表单的代码位于forms.py,检查电子邮件和密码的代码位于routes.py。当我试图创建登录时,这个错误开始出现,我更改了我的数据库模型文件models.py。我已经包括了登录页面的HTML,以防万一这就是我的问题所在

forms.py:

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField, BooleanField
from wtforms.validators import DataRequired, Length, Email, EqualTo, ValidationError
from itroom.models import User

class LoginForm(FlaskForm):
    email = StringField('Email',validators=[DataRequired(), Email()])
    password = PasswordField('Password', validators=[DataRequired()])
    remember = BooleanField('Remember Me')
    submit = SubmitField('Login')

routes.py:

from flask import Flask, render_template, url_for, flash, redirect, request
from itroom import app, db, bcrypt
from itroom.forms import LoginForm, AddUserForm
from itroom.models import User, Post
from flask_login import login_user

@app.route("/login", methods=['GET', 'POST'])       #defines the HTML loaded for /login
def login():
    form = LoginForm()
    if form.validate_on_submit():
        user = User.query.filter_by(email=form.userEmail.data).first()
        if user and bcrypt.check_password_hash(user.userPassword, form.password.data):
            login_user(user, remember=form.remember.data)
            return redirect(url_for('home'))
        else:
            flash('Login Unsucessful, Please check email and password', 'danger') 
    return render_template('login.html',form=form, title='Login')

models.py

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    userEmail = db.Column(db.String(120), unique=True, nullable=False)
    userPassword = db.Column(db.String(60), nullable=False)
    posts = db.relationship('Post', backref='author', lazy=True)

    def __repr__(self):
        #return f"User('{self.username}', '{self.email}')"
        return f"User('User')"

login.html

<body>
<h2 align="center" style="padding: 2.5%;"></h2>
      <img src="/static/Logo.png" alt="Logo" class="avatar">

      <form method="POST" action="">
        {{form.hidden_tag() }}
        <div class="form-group">
          {{form.email.label}}
          {% if form.email.errors %}
            {{form.email(size=30, class="form-control is-invalid")}}
            <div class="invalid-feedback">
              {% for error in form.email.errors %}
                <span>{{ error }}</span>
              {% endfor %}
            </div>
          {% else %}
           {{form.email(size=30, class="form-control")}}
          {% endif %}
        </div>
        {{form.password.label}} <br>
        {{form.password(size=30)}}

        {{form.remember}} <br>

        {{form.submit(class="btn btn-outline-info")}} <br>

      </form>

    <div class="container" style="background-color:#f1f1f1">
      <span class="psw">Forgot <a href="#">password?</a></span>
    </div>
  </form>
</div>

</body>
</html>


Tags: inpyformappflaskemailpackagesline

热门问题