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

Flask获取文件列表接口报错:TypeError: get()缺少必填参数ident

Flask文件列表接口报错:TypeError: get() missing 1 required positional argument: 'ident'

错误根源

你的报错核心是**Upload模型未定义json()方法**——SQLAlchemy的Model类默认不提供该方法,当你在getFiles中调用x.json()时,会触发内部方法调用错误,最终抛出get()参数缺失的异常。另外还有两处细节问题需要修正:

修复步骤

1. 给Upload模型添加序列化方法

在Upload类中新增json()方法,返回可序列化的模型数据字典(注意不要包含二进制的data字段,无法直接转为JSON):

class Upload(db.Model):
    id=db.Column(db.Integer, primary_key=True)
    filename = db.Column(db.String(50))
    data = db.Column(db.LargeBinary)

    def json(self):
        return {
            'id': self.id,
            'filename': self.filename
        }

2. 修正配置项拼写错误

将SQLALCHEMY_TRACK_MODIFICATIONs改为正确的SQLALCHEMY_TRACK_MODIFICATIONS(末尾字母大写S),否则会触发SQLAlchemy警告:

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

3. 修复路由中ID类型不匹配问题

download和delete路由的upload_id是字符串类型,而数据库id为整数,需转换后再查询,避免匹配失败:

@app.route('/download/<upload_id>')
def download(upload_id):
    upload = Upload.query.filter_by(id=int(upload_id)).first()
    if not upload:
        return {'message': 'File not found'}, 404
    return send_file(BytesIO(upload.data), attachment_filename=upload.filename , as_attachment=True)

@app.route('/delete/<upload_id>')
def delete(upload_id):
    f = Upload.query.filter_by(id=int(upload_id)).first()
    if f: 
        db.session.delete(f)
        db.session.commit()
        return {'message':'Deleted'}
    else:
        return {'message':'File not found'},404

修改后的完整app.py代码

from io import BytesIO
from flask import Flask , render_template, request , send_file
from flask_sqlalchemy import SQLAlchemy
from flask_restful import Api, Resource, reqparse 
from flask_cors import CORS, cross_origin

app= Flask(__name__)
CORS(app)
app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///data.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

class Upload(db.Model):
    id=db.Column(db.Integer, primary_key=True)
    filename = db.Column(db.String(50))
    data = db.Column(db.LargeBinary)

    def json(self):
        return {
            'id': self.id,
            'filename': self.filename
        }

@app.route('/' , methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        file= request.files['file']
        upload = Upload(filename=file.filename, data=file.read()) 
        db.session.add(upload)
        db.session.commit()
        return f'Uploaded: {file.filename}' 
    return render_template('index.html')

@app.route('/files', methods=['GET'])
def getFiles():
    files = Upload.query.all()
    return {'Files': [x.json() for x in files]}

@app.route('/download/<upload_id>')
def download(upload_id):
    upload = Upload.query.filter_by(id=int(upload_id)).first()
    if not upload:
        return {'message': 'File not found'}, 404
    return send_file(BytesIO(upload.data), attachment_filename=upload.filename , as_attachment=True)

@app.route('/delete/<upload_id>')
def delete(upload_id):
    f = Upload.query.filter_by(id=int(upload_id)).first()
    if f: 
        db.session.delete(f)
        db.session.commit()
        return {'message':'Deleted'}
    else:
        return {'message':'File not found'},404

# 首次运行时创建数据库表
with app.app_context():
    db.create_all()

额外说明

  • 不要在json()方法中返回data字段,二进制文件内容无法直接序列化为JSON,前端需通过/download/<id>接口下载文件。
  • 首次运行代码时,with app.app_context(): db.create_all()会自动创建SQLite数据库表,避免表不存在的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 01:48:19