flask - Python 脚本在测试登录成功屏幕时返回 KeyError

问题描述 投票:0回答:1

我正在制作一个 Python 脚本,打开一个要求输入用户名和密码的链接,以及一个显示您的详细信息的登录按钮,表明该过程已完成。我的问题是,虽然登录页面可以工作,但当我按下登录按钮时,它会给出

KeyError

这是我的代码:

from flask import Flask, request, redirect, url_for

app = Flask(__name__)

@app.route('/')
def RedirectToLogin():
    return redirect(url_for('login'))

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        
        return '''
            <html>
            <head>
                <style>
                    .details-container {
                        display: flex;
                        justify-content: center;
                        align-items: center;
                        height: 100vh;
                        font-size: 24px;
                        text-align: center;
                    }
                    .form-container {
                        display: flex;
                        flex-direction: column;
                        width: 200px;
                        margin: 0 auto;
                    }
                    .form-input {
                        margin-bottom: 10px;
                    }
                    .smooth-button {
                        border-radius: 12px;
                        padding: 10px 20px;
                        background-color: black;
                        color: white;
                        border: none;
                        cursor: pointer;
                        margin-top: 20px;
                    }
                    .smooth-button:hover {
                        background-color: #45a049;
                    }
                </style>
            </head>
            <body>
                <div class="details-container">
                    <div>
                        <p>Username: {0}</p>
                        <p>Password: {1}</p>
                    </div>
                </div>
            </body>
            </html>
        '''.format(username, password)
    
    return '''
        <html>
        <head>
            <style>
                .form-container {
                    display: flex;
                    flex-direction: column;
                    width: 200px;
                    margin: 0 auto;
                }
                
                .form-input {
                    margin-bottom: 10px;
                }
                
                .smooth-button {
                    border-radius: 12px;
                    padding: 10px 20px;
                    background-color: black;
                    color: white;
                    border: none;
                    cursor: pointer;
                    margin-top: 20px;
                }
                
                .smooth-button:hover {
                    background-color: #45a049;
                }
            </style>
        </head>
        <body>
            <form method="post" action="/login" class="form-container">
                <label for="username">Username:</label>
                <input type="text" id="username" name="username" class="form-input"><br>
                
                <label for="password">Password:</label>
                <input type="password" id="password" name="password" class="form-input"><br>
                <input type="submit" value="Login" class="smooth-button">
            </form>
        </body>
        </html>
    '''

if __name__ == '__main__':
    app.run(debug=True)

我的期望:


用户名:[用户输入的用户名] 密码:[用户输入密码]

[登录] <---- button

用户名:[输入的用户名] 密码:[输入的密码]

我得到了什么


用户名:[用户输入的用户名] 密码:[用户输入密码]

[登录] <---- button

按键错误

密钥错误:' 显示'

回溯(最近一次调用最后一次) 文件“C:\ Users \ ABC \ AppData \ Local \ Packages \ PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0 \ LocalCache \ local-packages \ Python311 \ site-packages lask pp.py”,第1498行,位于call

返回 self.wsgi_app(environ, start_response) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

文件“C:\ Users \ ABC \ AppData \ Local \ Packages \ PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0 \ LocalCache \ local-packages \ Python311 \ site-packages lask pp.py”,

wsgi_app 中第 1476 行

响应 = self.handle_exception(e) ^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件“C:\ Users \ ABC \ AppData \ Local \ Packages \ PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0 \ LocalCache \ local-packages \ Python311 \ site-packages lask pp.py”,

wsgi_app 中第 1473 行

响应 = self.full_dispatch_request() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件“C:\ Users \ ABC \ AppData \ Local \ Packages \ PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0 \ LocalCache \ local-packages \ Python311 \ site-packages lask pp.py”,

第 882 行,在 full_dispatch_request 中

rv = self.handle_user_exception(e) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件“C:\ Users \ ABC \ AppData \ Local \ Packages \ PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0 \ LocalCache \ local-packages \ Python311 \ site-packages lask pp.py”,

第 880 行,在 full_dispatch_request 中

rv = self.dispatch_request() ^^^^^^^^^^^^^^^^^^^^^^^^^ 文件“C:\ Users \ ABC \ AppData \ Local \ Packages \ PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0 \ LocalCache \ local-packages \ Python311 \ site-packages lask pp.py”,

dispatch_request 中第 865 行 return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # 类型:忽略[no-any-return] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ 文件“c:\Users\ABC\Desktop\VsCode Projects\Python Projects\Login-Page-with-Flask.py”,

第59行,登录中 '''.format(用户名,密码) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^在此框架中打开交互式 python shell 关键错误:' 展示' 调试器捕获 WSGI 应用程序中的异常。您现在可以查看导致错误的回溯。 要在交互式回溯和纯文本回溯之间切换,您可以单击“回溯”标题。

从文本回溯中,您还可以创建它的粘贴。要执行代码,请将鼠标悬停在要调试的框架上,然后单击右侧的控制台图标。

您可以在堆栈帧中执行任意Python代码,并且有一些额外的帮助器可用于内省:

dump() 显示框架中的所有变量 dump(obj) 转储有关该对象的所有已知信息


我们将不胜感激所有帮助。

python flask
1个回答
0
投票

您的 HTML+CSS 代码中有许多 未转义的大括号。 Python 将所有大括号视为占位符,并尝试将它们全部替换。并且,您只提供了两个值。一种解决方案是转义所有大括号。但最好的解决方案是使用模板而不是将裸露的 html 代码放入 python 代码中。

© www.soinside.com 2019 - 2024. All rights reserved.