Django文件的上传和数据显示

Posted fortisck

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django文件的上传和数据显示相关的知识,希望对你有一定的参考价值。

前言

最近在做基于机器学习的预测系统,里面需要用到excel表格的上传和显示,在这把过程记录一下

Excel文件的上传

  1. 在页面中加入form表单

    <form method="POST" action="/index/" enctype="multipart/form-data">
      % csrf_token %
        <input class="form-control-file" type="file" name="Scores" accept=".xlsx, .xls"/>
        <input class="form-control-file" type="submit" value="上传"/>
        % if msg %
          <span>
            msg
          </span>
        % endif %
    </form>
  2. 修改应用文件夹中views.py文件

    首先导入用到的库

    from os.path import isdir, dirname, join
    from os import mkdir
    from .settings import BASE_DIR

    接着增加上传函数

    def upload(request):
        if request.method == 'POST':
            # 创建用来存储上传文件的文件夹
            uploadDir = BASE_DIR+'/upload'
            if not isdir(uploadDir):
                mkdir(uploadDir)
            # 获取上传的文件
            uploadedFile = request.FILES.get('Scores')
            if not uploadedFile:
                return render(request, 'index.html', 'msg':'没有选择文件')
            if not uploadedFile.name.endswith('.xlsx'):
                if not uploadedFile.name.endswith('.xls'):
                    return render(request, 'index.html', 'msg':'必须选择xlsx或xls文件')
            # 上传
            dstFilename = join(uploadDir, uploadedFile.name)
            with open(dstFilename, 'wb') as fp:
                for chunk in uploadedFile.chunks():
                    fp.write(chunk)
            context = 
            context['msg'] = '上传成功'
            return render(request, 'index.html', context)
        else:
            return render(request, 'index.html','msg':None)
  3. 修改应用文件夹中的urls.py文件

    urlpatterns = [
     path('index/', views.upload,),
     path('admin/', admin.site.urls),
    ]

Excel文件的读取与显示

  1. 首先在views.py文件中添加需要用到的库

    import pandas as pd

    接着修改刚才的上传函数

    def upload(request):
     if request.method == 'POST':
         # 创建用来存储上传文件的文件夹
         uploadDir = BASE_DIR+'/upload'
         if not isdir(uploadDir):
             mkdir(uploadDir)
         # 获取上传的文件
         uploadedFile = request.FILES.get('Scores')
         if not uploadedFile:
             return render(request, 'index.html', 'msg':'没有选择文件')
         if not uploadedFile.name.endswith('.xlsx'):
             if not uploadedFile.name.endswith('.xls'):
                 return render(request, 'index.html', 'msg':'必须选择xlsx或xls文件')
         # 上传
         dstFilename = join(uploadDir, uploadedFile.name)
         with open(dstFilename, 'wb') as fp:
             for chunk in uploadedFile.chunks():
                 fp.write(chunk)
         # 读取excel文件并转化为html格式
         pdData = pd.read_excel(dstFilename)
         pdhtml = pdData.to_html()
         context = 
         context['form'] = pdhtml
         context['msg'] = '上传成功'
         return render(request, 'index.html', context)
     else:
         return render(request, 'index.html','msg':None)
  2. 最后在页面中增加

     % autoescape off %
        form
     % endautoescape %
  3. 执行命令,运行服务器,即可上传文件并且将上传的Excel表格显示在网页中了

以上是关于Django文件的上传和数据显示的主要内容,如果未能解决你的问题,请参考以下文章

Django 显示正在上传的用户

django 上传文件问题

Django后台上传的图片前台怎么显示不出来?路径的问题怎样解决?

使用 Django 显示上传文件的内容(而不是保存)

django-ckeditor 上传图片以外的文件

Nginx/Django 文件上传权限