我对此并不陌生,但是我已经在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问题。