四时宝库

程序员的知识宝库

用django4、python3、html5、css3写出一个文件上传、下载的页面

思路是方向,代码是时间,知识需积累,经验需摸索。希望对大家有用,有错误还望指出。

要实现一个文件上传和下载的页面,我们需要涉及到 Django 中的以下几个概念/类/函数:

  1. models.Model:定义数据库模型,存储文件信息;
  2. forms.ModelForm:定义文件上传表单,用于提交文件到后端处理;
  3. views.View:处理上传、下载的逻辑;
  4. HttpResponse:返回下载的文件;
  5. FileField:Django 中的文件上传字段;
  6. FileResponse:返回文件的 HTTP 响应对象。

一、在 models.py 文件中定义一个 File 模型,用于存储上传的文件和文件相关信息。

from django.db import models

class File(models.Model):

filename = models.CharField(max_length=100)

file = models.FileField(upload_to='uploads/')

created_at = models.DateTimeField(auto_now_add=True)

代码中定义了一个名为 File 的模型,包含了文件名、文件、创建时间三个字段,并规定文件上传到 uploads/ 文件夹下。

二、在 forms.py 文件中,定义一个 FileForm 表单,用于提交文件到后端处理。

from django import forms

from .models import File

class FileForm(forms.ModelForm):

class Meta:

model = File

fields = ['filename', 'file']

代码中定义了一个名为 FileForm 的表单类,它继承自 Django 的 ModelForm,并以 File 模型为模板。fields 属性定义了需要提交的字段。class Meta: model = File fields = ['filename', 'file']

三、在 views.py 文件中,定义处理文件上传和下载的视图函数。

from django.shortcuts import render, redirect

from django.http import FileResponse

from django.views import View

from .models import File

from .forms import FileForm

class FileView(View):

def get(self, request):

files = File.objects.all().order_by('-created_at')

form = FileForm()

return render(request, 'files.html', {'files': files, 'form': form})

def post(self, request):

form = FileForm(request.POST, request.FILES)

if form.is_valid():

form.save()

return redirect('file_list')

else:

return render(request, 'files.html', {'form': form})


class FileDownloadView(View):

def get(self, request, file_id):

file = File.objects.get(pk=file_id)

response = FileResponse(open(file.file.path, 'rb'))

response['Content-Disposition'] = 'attachment; filename=' + file.filename

return response

代码中定义了两个视图函数,一个用于显示上传文件列表和提交表单,一个用于下载文件。其中 FileView 用于处理 GET 和 POST 请求,并加载模板 files.html;FileDownloadView 用于下载文件,将文件二进制数据返回给客户端。

四、定义前端模板,在 templates 目录下创建名为 files.html 的模板文件,用于显示上传文件列表和提交表单。

<h2>Upload File</h2> *****上传******

<form method="post" enctype="multipart/form-data">

{% csrf_token %}

{{ form.as_p }}

<button type="submit">Upload</button> </form>

<h2>Download Files</h2> *****下载*****

<ul>

{% for file in files %}

<li><a href="{% url 'file_download' file.id %}">{{ file.filename }}</a></li>

{% empty %}

<li>No files found.</li>

{% endfor %} </ul>

代码中用 html 的 form 标签以及 Django 的 csrf_token 安全验证提供了上传文件的表单。展示已上传的文件,通过从 model 中获取数据生成文件列表。

以上是一个实现文件上传和下载的基本示例,它涉及到了 Django 中的一系列概念、类和函数,其中包括两个关键的视图函数,即处理文件上传的 FileView,以及处理文件下载的 FileDownloadView。这两个视图函数实现了对于文件的上传、下载、展示。前端通过 html 文件上传的表单 形式 提交数据,后端通过 models.Model 和 forms.ModelForm 等定义实现数据存储和数据处理。最终,前端通过 FileResponse 实现文件下载。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接