Django 生成CSV文件(打开页面后生成CSV数据,下载到电脑),文件上传

import csv
with open("a.csv","w",newline="") as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(["a","b","c"])
def test_csv_view(request):
    from bookstore.models import Book
    response = HttpResponse(content_type="test/csv")
    response['Content-Disposition'] = 'attachment;filename="test_csv.csv"'
    all_book = Book.objects.all()
    writer = csv.writer(response)
    writer.writerow(["id","title"])
    for i in all_book:
        writer.writerow([i.id,i.title])
    return response

视图函数,用request.FILES 取文件框内容
file = request.FILES[“xxx”]

setting.py
添加

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,"media")

urls.py
添加

from django.conf import settings
from django.conf.urls.static import static
urlpatterns +=static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

文件写入方案

@csrf.csrf_exempt
def test_upload1(request):
    if request.method == "GET":
        return render(request,"test_upload.html")
    if request.method == "POST":
        a_file = request.FILES["myfile"]
        print("上传文件",a_file.name)
        filename = os.path.join(settings.MEDIA_ROOT,a_file.name)
        with open(filename,"wb") as f:
            data = a_file.file.read()
            f.write(data)
        return HttpResponse("接受文件成功")

字段: FileField(upload=”子目录名”)

存储路径

@csrf.csrf_exempt
def test_upload2(request):
    if request.method == "GET":
        return render(request,"test_upload.html")
    if request.method == "POST":
        title = request.POST.get("title")
        a_file = request.FILES["myfile"]
        content.object.create(desc=title,myfile=a_file)
        return HttpResponse("接受文件成功")

content→模型类

查看上传文件

http://127.0.0.1:8000/media/类字段名/图片名

有模板

import xlrd
from xlutils.copy import copy
import xlwt
import os
import datetime
from django.http import FileResponse

def get_file_path(file_type):

    app_file_save_path = r'D:\Desktop\pythonProject1\test1'
    path = os.path.join(app_file_save_path, file_type)

    if not os.path.exists(path):
        os.makedirs(path)

    return path

def excel(request):
    template = xlrd.open_workbook('D:\Desktop\pythonProject1\emplate.xls', formatting_info=True)
    export_file = copy(template)
    sheet = export_file.get_sheet(0)

    style = xlwt.XFStyle()
    borders = xlwt.Borders()
    font = xlwt.Font()

    font.height = 220

    borders.left = 1
    borders.right = 1
    borders.top = 1
    borders.bottom = 1
    borders.bottom_colour = 0x3A

    style.font = font
    style.borders = borders

    for row, num in enumerate(range(3)):

        sheet.write(row + 6, 0,
                    f'{num}', style)

    export_path = get_file_path('ceshi')
    export_file_name = "feedback_export" + f"{datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S')}.xls"
    export_file_path = os.path.join(export_path, export_file_name)
    export_file.save(export_file_path)

    f = open(export_file_path, 'rb')
    response = FileResponse(f)
    response['Content-Type'] = 'application/octet-stream'
    export_file_name = os.path.basename(export_file_path)
    response['Content-Disposition'] = 'attachment;filename=%s' % export_file_name
    return response

无模板

def excel(request):
    export_path = get_file_path("临时文件保存位置")

    workbook = xlwt.Workbook()

    worksheet = workbook.add_sheet('sheet1')
    export_file_name = "文件名.xls"'))
    export_file_path = os.path.join(export_path, export_file_name)

    head_style = xlwt.XFStyle()
    head_borders = xlwt.Borders()
    head_font = xlwt.Font()

    head_font.height = 240
    head_font.bold = True

    head_borders.left = 1
    head_borders.right = 1
    head_borders.top = 1
    head_borders.bottom = 1
    head_borders.bottom_colour = 0x3A
    head_style.font = head_font
    head_style.borders = head_borders

    data_style = xlwt.XFStyle()
    data_borders = xlwt.Borders()
    data_font = xlwt.Font()

    data_font.height = 220

    data_borders.left = 1
    data_borders.right = 1
    data_borders.top = 1
    data_borders.bottom = 1
    data_borders.bottom_colour = 0x3A
    data_style.font = data_font
    data_style.borders = data_borders

    head_list = list("表头名的列表")
    head_col = 0
    for a_head in head_list:
        worksheet.write(0, head_col, a_head, head_style)
        head_col += 1

    data_row = 1
    for trouble in troubles:

        worksheet.write("行号", "列号", f'数据', data_style)

    workbook.save(export_file_path)
    return export_file_path

Original: https://blog.csdn.net/weixin_43640594/article/details/122662874
Author: weixin_43640594
Title: Django 生成CSV文件(打开页面后生成CSV数据,下载到电脑),文件上传

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/735706/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球