You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Flask API POST请求报错(415与UnboundLocalError)求助

Flask POST接口/createlogin异常解决方案

1. 415 Unsupported Media Type 错误

原因

代码通过request.json获取请求体,但Postman请求未配置正确的Content-Type头部,导致Flask无法识别并解析JSON格式数据。

解决步骤

  • Postman中切换请求Body为raw格式,类型选择JSON
  • 在请求Headers中添加Content-Type: application/json
  • 请求体示例:
{
  "username": "your_username",
  "password": "your_password"
}

2. UnboundLocalError: 局部变量'cursor'未定义

原因

当try块中初始化cursor/conn前就抛出异常(比如JSON解析失败、参数缺失),finally块直接执行close()操作时,这两个变量还未被定义,触发报错。

代码修复方案

@app.route('/createlogin', methods=['POST'])
def create_login():
    conn = None
    cursor = None
    try:
        # 先校验请求格式
        if not request.is_json:
            return jsonify({"error": "请求格式错误,请使用application/json"}), 415
        
        _json = request.json
        # 用get方法避免KeyError,同时校验参数非空
        _username = _json.get('username')
        _password = _json.get('password')
        
        if _username and _password:
            conn = mysql.connect()
            cursor = conn.cursor(pymysql.cursors.DictCursor)        
            sqlQuery = "INSERT INTO user_logins(username, password) VALUES(%s, %s)"
            bindData = (_username, _password)            
            cursor.execute(sqlQuery, bindData)
            conn.commit()
            return jsonify('用户登录信息添加成功!'), 200
        else:
            return jsonify({"error": "用户名或密码不能为空"}), 400
    except Exception as e:
        print(e)
        if conn:
            conn.rollback()  # 异常时回滚事务
        return jsonify({"error": str(e)}), 500
    finally:
        # 先判断变量是否存在再执行关闭
        if cursor:
            cursor.close()
        if conn:
            conn.close()

额外优化建议

  • 禁止明文存储密码,使用werkzeug.security.generate_password_hash()加密后存入数据库
  • 可替换原生pymysql为Flask-SQLAlchemy,简化数据库操作逻辑
  • 用专业日志库(如logging)替代print(e),便于线上问题排查

内容的提问来源于stack exchange,提问作者Tr3s3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 17:45:31