代码不起作用。登录时出现405错误

时间:2019-09-13 07:40:27

标签: mysql forms flask

我对此并不陌生,但是我已经在PythonAnywhere中做了很多工作,但是我有几个问题。这个问题与Flask不同-不允许POST错误405方法,因为它没有涉及细节和深度。

1)我怎么知道我的forms.py是否正确地通过我的数据库进行了验证?

2)如何知道我是否在使用数据库?

3)提交按钮是否提交POST方法?

4)某物()来自何处?它不是从任何地方导入的。

5)会话是否需要匹配html中的输入名称?

routes.py

mysql = MySQL()
mysql.init_app(app)

@app.route("/", methods = ['GET', 'POST'])
def login():
    if 'email' in session:
        return redirect(url_for('update_user'))
    elif 'avatarName' in session:
        return redirect(url_for('update_user'))

    form = LoginForm()

    if request.method == "POST":
        if form.validate() == False:
            return render_template("login.html", form=form)
        else:
            avatarName = form.avatarName.data
            email = form.email.data
            password = form.password.data

            user_avatar = mysql.users.query.filter_by(avatarName=avatarName).first()
            user_email = mysql.users.query.filter_by(email=email).first()
            user_password = mysql.users.query.filter_by(password=password).first()

            if user_email is not None and user_password is not None:
                session['email'] = form.email.data
                return redirect(url_for('update_user'))
            elif user_avatar is not None and user_password is not None:
                session['avatarName'] = form.avatarName.data
                return redirect(url_for('update_user'))
            else:
                return redirect(url_for('login'))
    elif request.method == 'GET':
        return render_template('login.html', form=form)

forms.py

class LoginForm(Form):
    avatarName = StringField(validators=[InputRequired()])
    email = EmailField(validators=[InputRequired(), Email()])
    password = PasswordField(validators=[InputRequired()])
    submit = SubmitField()

login.html

<form action="/update_user" method="post">
                        <div>
                            <label>Username or Email</label>
                            <input type="text" class="text-input" placeholder="Enter Username or Email" name="avatarName" value="{{request.form.avatarName}}">
                        </div>
                        <div>
                            <label>Password</label>
                            <input type="password" class="text-input" placeholder="Enter Password" name="password" value="{{request.form.password}}">
                        </div>
                        <div class="links">
                            <a href="#">Forgot password?</a>
                        </div>
                        <div class="checkbox">
                            <input type="checkbox" class="check-input"> Remember Me <br>
                        </div>
                        <button name="login" type="submit" class="primary-btn">Sign In</button>
                    </form>

我真的不知道为什么它会给我一个405错误。它没有给我/ update_user页面。如果我只键入URL,那么它可以工作,所以这不是URL问题。

0 个答案:

没有答案