我使用python flask创建了简单的登录表单,但无法重定向到我的主页,

我使用python flask创建了简单的登录表单,但无法重定向到我的主页,,python,flask,pycharm,flask-wtforms,wtforms,Python,Flask,Pycharm,Flask Wtforms,Wtforms,我的PYID在窗口运行 Restarting with stat * Debugger is active! * Debugger PIN: 127-177-535 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) * Detected change in 'C:\\Users\\ACER\\PycharmProjects\\wtf-forms\\forms.py', reloading * Restarting wi

我的PYID在窗口运行

Restarting with stat
 * Debugger is active!
 * Debugger PIN: 127-177-535
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Detected change in 'C:\\Users\\ACER\\PycharmProjects\\wtf-forms\\forms.py', reloading
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 127-177-535
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [05/Feb/2021 21:57:38] "POST /login HTTP/1.1" 200 -
127.0.0.1 - - [05/Feb/2021 21:57:39] "POST /login HTTP/1.1" 200 -
127.0.0.1 - - [05/Feb/2021 21:57:39] "POST /login HTTP/1.1" 200 -
我在浏览器中键入了127.0.0.1/login,并显示了登录表单。当我将数据输入表单时,web浏览器中不会显示错误,但无法重定向到主页

在我的浏览器控制台中,我发现了这个错误

登录:1未经检查的运行时。lastError:消息端口在收到响应之前关闭

这是我的python代码,

from flask import Flask,redirect,render_template

from flask_wtf import FlaskForm

from wtforms import StringField,PasswordField,SubmitField

from wtforms.validators import DataRequired,Email,Length


class LoginForm(FlaskForm):
    email =StringField("Email",validators=[DataRequired(),Email()])
    password = PasswordField("Password",validators=[DataRequired(),Length(min=4,max=10)])

    submit =SubmitField("Log In")


app=Flask(__name__)
app.config["SECRET_KEY"]="secret"

@app.route("/")
def Home():
    return "Hello World"



@app.route("/login",methods=["POST","GET"])
def Index():
    form=LoginForm()

    if form.validate_on_submit():
       return redirect("Home")


    return render_template("index.html",form=form)





if __name__ =="__main__":
    app.run(debug=True)
  <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>form</title>
    </head>
    <body>
    
    <form action="" method="POST">
        {{form.email.label()}}
        {{form.email()}}
        <br><br>
        {{form.password.label()}}
        {{form.password()}}
        <br><br>
        {{form.submit()}}
    
    </form>
    
    
    
    
    </body>
    </html>
这是我的HTML代码,

from flask import Flask,redirect,render_template

from flask_wtf import FlaskForm

from wtforms import StringField,PasswordField,SubmitField

from wtforms.validators import DataRequired,Email,Length


class LoginForm(FlaskForm):
    email =StringField("Email",validators=[DataRequired(),Email()])
    password = PasswordField("Password",validators=[DataRequired(),Length(min=4,max=10)])

    submit =SubmitField("Log In")


app=Flask(__name__)
app.config["SECRET_KEY"]="secret"

@app.route("/")
def Home():
    return "Hello World"



@app.route("/login",methods=["POST","GET"])
def Index():
    form=LoginForm()

    if form.validate_on_submit():
       return redirect("Home")


    return render_template("index.html",form=form)





if __name__ =="__main__":
    app.run(debug=True)
  <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>form</title>
    </head>
    <body>
    
    <form action="" method="POST">
        {{form.email.label()}}
        {{form.email()}}
        <br><br>
        {{form.password.label()}}
        {{form.password()}}
        <br><br>
        {{form.submit()}}
    
    </form>
    
    
    
    
    </body>
    </html>

形式
{{form.email.label()}
{{form.email()}}


{{form.password.label()}} {{form.password()}}

{{form.submit()}}

**请帮助我修复此错误。**

问题一

您尝试重定向到“Home”,这是一个函数名,但没有路由

您可以重定向到“/”或使用Flask的“主页”url\u

问题二

您正在使用
Flask WTF
,一个表单框架,它会自动验证您提交的表单

它还可以防止所谓的CSRF安全问题

更多关于CSRF的信息

为了设置CSRF保护,您需要将以下代码添加到Python代码中:

from flask_wtf.csrf import CSRFProtect

...

csrf = CSRFProtect(app)
在实例化
app
对象后,请确保在行中添加
csrf

然后你需要更新你的HTML代码

将此添加到您的表单中

    {{ form.csrf_token() }}
看来

<form action="" method="POST">
    {{ form.csrf_token() }}
    {{form.email.label()}}
    {{form.email()}}
    <br><br>
    {{form.password.label()}}
    {{form.password()}}
    <br><br>
    {{form.submit()}}

</form>

{{form.csrf_token()}}
{{form.email.label()}
{{form.email()}}


{{form.password.label()}} {{form.password()}}

{{form.submit()}}
确保你已经根据这两个问题更新了你的代码,那么你的应用程序应该可以运行了——它在我的电脑上运行

如何解决此类问题?

我使用调试器来查找问题。虽然我不时使用烧瓶,但我没有看到您立即错过CSRF令牌

通常,我会启动一个调试器并逐步完成代码

这并不太复杂

我在Python爱尔兰会议上作了一次闪电般的演讲:


这仅仅是几分钟的时间,但它应该足够好地解释了基础知识,这样您就可以自己调试下一个问题了

问题一

您尝试重定向到“Home”,这是一个函数名,但没有路由

您可以重定向到“/”或使用Flask的“主页”url\u

问题二

您正在使用
Flask WTF
,一个表单框架,它会自动验证您提交的表单

它还可以防止所谓的CSRF安全问题

更多关于CSRF的信息

为了设置CSRF保护,您需要将以下代码添加到Python代码中:

from flask_wtf.csrf import CSRFProtect

...

csrf = CSRFProtect(app)
在实例化
app
对象后,请确保在行中添加
csrf

然后你需要更新你的HTML代码

将此添加到您的表单中

    {{ form.csrf_token() }}
看来

<form action="" method="POST">
    {{ form.csrf_token() }}
    {{form.email.label()}}
    {{form.email()}}
    <br><br>
    {{form.password.label()}}
    {{form.password()}}
    <br><br>
    {{form.submit()}}

</form>

{{form.csrf_token()}}
{{form.email.label()}
{{form.email()}}


{{form.password.label()}} {{form.password()}}

{{form.submit()}}
确保你已经根据这两个问题更新了你的代码,那么你的应用程序应该可以运行了——它在我的电脑上运行

如何解决此类问题?

我使用调试器来查找问题。虽然我不时使用烧瓶,但我没有看到您立即错过CSRF令牌

通常,我会启动一个调试器并逐步完成代码

这并不太复杂

我在Python爱尔兰会议上作了一次闪电般的演讲:


这仅仅是几分钟的时间,但它应该足够好地解释了基础知识,这样您就可以自己调试下一个问题了

您应该始终显示完整的错误消息。未找到错误,但无法重定向。您应该始终显示完整的错误消息。未找到错误,但无法重定向。我尝试了此操作,但不起作用。您的代码中还有一个问题,我将在一分钟内更新我的答案。现在我可以重定向到主页。,thanx为您提供了一个解释。我尝试了这个,但没有工作。您的代码中还有一个附加问题,我将在一分钟内更新我的答案。现在我可以重定向到主页,thanx为您提供解释。