当前位置:   article > 正文

fastapi+vue实现导入Excel表格的功能

fastapi+vue实现导入Excel表格的功能

1.前端部分

1.1 api设置

  1. // 导入用户
  2. export function uploadUser(data) {
  3. const formData = new FormData();
  4. formData.append('file', data); // data 是从文件上传事件中获取的文件对象
  5. return request({
  6. url: '/users/upload',
  7. method: 'post',
  8. headers: {
  9. 'Content-Type': 'multipart/form-data'
  10. },
  11. data: formData,
  12. transformRequest: [(data) => data] // 禁用默认的序列化行为
  13. })
  14. }

1.2 导入按钮

  1. <el-upload
  2. class="upload-demo"
  3. ref="upload"
  4. action="dummy-action"
  5. :show-file-list="false" :before-upload="handleImportUser">
  6. <el-button type="primary" icon="el-icon-download" style="margin-left: 20px">导入</el-button>
  7. </el-upload>

1.3 按钮点击事件调用接口

  1. // 导入的回调
  2. async handleImportUser(file) {
  3. if (!file.name.endsWith('.xlsx')) return this.$message.error('请上传Excel文件!')
  4. if (file.size > 1024 * 1024 * 5) return this.$message.error('文件大小不能超过5MB!')
  5. const res = await uploadUser(file)
  6. if (res.code !== 200) return this.$message.error('导入失败!')
  7. this.$message.success('导入成功!')
  8. this.getUserList()
  9. }

2. 后端部分

  1. @user_router.post('/upload', summary='导入用户')
  2. async def user_upload(file: UploadFile):
  3. # 检查文件类型是否为 Excel
  4. if not file.filename.endswith(('.xls', '.xlsx')):
  5. return base_response(code=400, msg='文件格式错误!')
  6. if file.size > 1024 * 1024 * 5:
  7. return base_response(code=400, msg='文件大小不能超过5MB!')
  8. # 读取 Excel 文件
  9. wb = openpyxl.load_workbook(file.file)
  10. ws = wb.active
  11. # 遍历 Excel 表格的每一行数据并保存到数据库中
  12. for row in ws.iter_rows(min_row=2, values_only=True): # Assuming first row is header
  13. try:
  14. name, nick_name, phone, password = row
  15. # 数据校验
  16. if not name or not password:
  17. raise ValueError('姓名和密码不能为空!')
  18. if await User.exists(name=name):
  19. raise ValueError('用户已存在!')
  20. if not re.match(r'^1[3-9]\d{9}$', str(phone)):
  21. raise ValueError('手机号码格式错误!')
  22. # 将有效数据保存到数据库中,这里假设有一个数据库操作函数 save_user()
  23. await User.create(name=name, nick_name=nick_name, phone=phone, password=hash_password(str(password)))
  24. except ValueError as e:
  25. print(f"数据导入失败:{e}")
  26. return base_response(code=200, msg='导入用户成功!')

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/589552
推荐阅读
相关标签
  

闽ICP备14008679号