阅读量:0
在Django中,可以使用FileField
来实现文件上传和下载。
文件上传的步骤如下:
- 在model中定义一个
FileField
字段,用于存储上传的文件。
from django.db import models class MyModel(models.Model): file = models.FileField(upload_to='uploads/')
- 在表单中添加一个
FileField
字段,用于用户选择要上传的文件。
from django import forms class MyForm(forms.Form): file = forms.FileField()
- 在视图中处理上传文件的逻辑。
from django.shortcuts import render, redirect from .forms import MyForm def upload(request): if request.method == 'POST': form = MyForm(request.POST, request.FILES) if form.is_valid(): my_model = MyModel(file=request.FILES['file']) my_model.save() return redirect('success') else: form = MyForm() return render(request, 'upload.html', {'form': form})
- 创建一个模板
upload.html
,用于显示上传文件的表单。
<form method="post" enctype="multipart/form-data"> {% csrf_token %} {{ form.as_p }} <button type="submit">Upload</button> </form>
文件下载的步骤如下:
- 在模型中定义一个方法,用于生成可以下载文件的URL。
from django.db import models from django.urls import reverse class MyModel(models.Model): file = models.FileField(upload_to='uploads/') def get_download_url(self): return reverse('download', args=[str(self.id)])
- 在视图中处理文件下载的逻辑。
from django.http import FileResponse from .models import MyModel def download(request, pk): my_model = MyModel.objects.get(pk=pk) file_path = my_model.file.path return FileResponse(open(file_path, 'rb'))
- 在urls.py中定义文件下载的URL。
from django.urls import path from .views import upload, download urlpatterns = [ path('upload/', upload, name='upload'), path('download/<int:pk>/', download, name='download'), ]
- 创建一个模板
download.html
,用于显示下载文件的链接。
<a href="{{ my_model.get_download_url }}">Download</a>