添加方法会导致“索引超出范围错误”?

时间:2019-02-17 17:47:18

标签: python html post flask sqlite

添加methods=["POST", "GET"]的重要组成部分时,我的代码显示错误:

Line 127, in PatientDashboard """.format(Data[0][0])) IndexError: list index out of range

我了解此错误通常意味着什么,但我不了解添加方法如何影响列表的大小。

@app.route("/PatientDashboard.html", methods=["GET", "POST"])
def PatientDashboard():
    Username = (request.args.get("Username"))

    Connection = sqlite3.connect(DB)
    Cursor = Connection.cursor()
    Data = Cursor.execute("""
        SELECT *
        FROM PatientTable
        WHERE Username = '{}'
    """.format(Username))
    Data = Data.fetchall()

    AllAppointments = Cursor.execute("""
        SELECT Title, Firstname, Surname, TimeSlot, Date, Status
        FROM AppointmentTable
        INNER JOIN DoctorTable ON AppointmentTable.DoctorID = DoctorTable.DoctorID
        WHERE PatientID = '{}'
    """.format(Data[0][0]))
    AllAppointments = AllAppointments.fetchall()

SQL语句运行完美(数据库不为空),并且在第一个SQL语句之后添加print(Data)时,将输出嵌套列表。

我通过查看关于stackoverflow的其他各种问题尝试了故障排除,但是没有运气。

非常感谢您。

编辑1:

Username = (request.args.get("Username"))
print("Username: ", Username)

给出正确的输出,例如Username: nx_prv,但使用POST请求后,输出将变为Username: None

编辑2:

我设法使用flask.sessions解决了这个问题。问题是request.args.get("Username")每次都被“重置”。

1 个答案:

答案 0 :(得分:0)

我设想的场景:使用GET方法测试了路由(因为没有Vital="yes"参数),一切都很好。添加了methods参数,以便可以测试POST,并且它“停止工作”。但是它确实并没有停止工作,只是没有处理POST请求而已。

来自flask doc on request object的两个显着属性是:

  

表格

     

具有从POST或PUT请求中解析的表单数据的MultiDict。请记住,文件上传不会在这里结束,但是   而是在files属性中。

     

参数

     

具有查询字符串的解析内容的MultiDict。 (URL中问号后的部分。)

因此GET请求将“填充” methods,而POST请求将args填充。 POST请求中此行form的用户名将是None

您可以通过询问请求对象的method属性来确定哪种方法。

  

方法

     

当前请求方法(POST,GET等)