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
相关产品推荐
相关产品推荐

