Flask表单提交失败无法写入SQL数据库,代码问题排查求助
代码问题排查与修复方案
HTML代码问题
- 表单提交方式错误:当前
method="GET","POST"写法不符合规范,文件上传必须使用POST请求,修改为method="POST"即可 - 文件字段名不匹配:文件上传input的
name属性为Photo,但Python代码中取文件时用的是request.files['file'],两边名称完全不对应,要么将input的name改为file,要么将Python取文件的逻辑改为request.files['Photo'] - 模板变量缺失:首次访问首页时
/路由没有给模板传递filename参数,直接加载img标签会触发变量不存在报错,建议在模板中加判断,只有filename不为空时才渲染图片标签 - JS资源加载错误:script标签错误使用了
href属性,应该替换为src,否则JS文件无法正常加载
Python代码问题
- 数据库写入字段取值错误:代码中尝试从表单
data['Photo']取值,但Photo是文件字段不在表单文本数据里,你要存入数据库的应该是已经保存好的文件名filename,将sql执行的参数改为(data['Name'], data['Address'], filename)即可 - 多余的错误打印语句:
print(data['file'])完全错误,file是文件字段不在form数据里,运行会触发KeyError,直接删除该行即可 - 重复定义secret_key:代码中先后两次定义
app.secret_key,虽然不直接触发报错,但会导致配置冲突,删除后面重复的app.secret_key = "secret key"即可 - 缺少异常捕获逻辑:建议给数据库操作加try-except包裹,出现执行错误时回滚事务并打印错误信息,方便后续排查问题:
try: dbcursor.execute("INSERT INTO webproject(name,Address,Photo) VALUES(%s,%s,%s)",(data['Name'],data['Address'],filename,)) db.commit() except Exception as e: print(e) db.rollback() flash('数据写入失败')
内容的提问来源于stack exchange,提问作者Zeeshan Khan
相关产品推荐
相关产品推荐

