Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django中上载和下载excel文件_Python_Django_Download_Upload - Fatal编程技术网

Python 在Django中上载和下载excel文件

Python 在Django中上载和下载excel文件,python,django,download,upload,Python,Django,Download,Upload,我想创建一个网络框架,我想上传excel文件,然后保存和下载相同的excel文件。如果同一个excel文件在下载时被上传2次或3次以上,该文件是否应该用一些sumber或其他名称命名?有了下载按钮,我该怎么做 我写了上传代码,但我不知道如何继续下载部分可以有人帮助吗 Views.py from django.shortcuts import render import openpyxl import settings def index(request): if "GET" == re

我想创建一个网络框架,我想上传excel文件,然后保存和下载相同的excel文件。如果同一个excel文件在下载时被上传2次或3次以上,该文件是否应该用一些sumber或其他名称命名?有了下载按钮,我该怎么做

我写了上传代码,但我不知道如何继续下载部分可以有人帮助吗

Views.py

from django.shortcuts import render
import openpyxl
import settings

def index(request):
    if "GET" == request.method:
        return render(request, 'myapp/index.html', {})
    else:
        excel_file = request.FILES["excel_file"]

        # you may put validations here to check extension or file size

        wb = openpyxl.load_workbook(excel_file)

        # getting all sheets
        sheets = wb.sheetnames
        print(sheets)

        # getting a particular sheet
        worksheet = wb["Sheet1"]
        print(worksheet)

        # getting active sheet
        active_sheet = wb.active
        print(active_sheet)

        # reading a cell
        print(worksheet["A1"].value)

        excel_data = list()
        # iterating over the rows and
        # getting value from each cell in row
        for row in worksheet.iter_rows():
            row_data = list()
            for cell in row:
                row_data.append(str(cell.value))
                print(cell.value)
            excel_data.append(row_data)

        return render(request, 'myapp/index.html', {"excel_data":excel_data})
html

<html>
    <head>
        <title>
            Excel file upload and processing : Django Example : ThePythonDjango.Com
        </title>
    </head>
    <body style="margin-top: 30px;margin-left: 30px;">
        <form action="{% url "myapp:index" %}" method="post" enctype="multipart/form-data">
            {% csrf_token %}
            <input type="file"
                   title="Upload excel file"
                   name="excel_file"
                   style="border: 1px solid black; padding: 5px;"
                   required="required">
            <p>
            <input type="submit"
                   value="Upload"
                   style="border: 1px solid green; padding:5px; border-radius: 2px; cursor: pointer;">
        </form>

        <p></p>
        <hr>

        {% for row in excel_data %}
            {% for cell in row %}
                {{ cell }}&nbsp;&nbsp;
            {% endfor %}
            <br>
        {% endfor %}
    </body>
</html>

当同一个文件被上传多次时,新文件将被命名为扩展号或随机字符串。你可以调整它

有两种方法可以使文件可供下载:

  • 将上传的文件存储在公共场所,然后使用webserver(nginx,apache)处理下载。这就像使用webserver提供Django项目的静态/媒体文件一样。这是推荐的。看看这个:

  • 在django视图中,读取文件的内容,然后将其返回给客户端。不推荐这样做

  • from django.contrib import admin
    from django.urls import path, include
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', include('myapp.urls', namespace="myapp")),
    ]