Django文件上传
实现安全的文件上传功能,包括模型、表单和视图配置。 · 难度:入门 · +15XP
文件上传基础
Django处理文件上传需要三个要素:模型中的FileField/ImageField、表单的enctype属性、视图中的request.FILES。
模型定义
from django.db import models
class Document(models.Model):
title = models.CharField(max_length=100)
file = models.FileField(upload_to='uploads/%Y/%m/%d/')
uploaded_at = models.DateTimeField(auto_now_add=True)表单创建
from django import forms
from .models import Document
class DocumentForm(forms.ModelForm):
class Meta:
model = Document
fields = ['title', 'file']视图处理
from django.shortcuts import render, redirect
from .forms import DocumentForm
def upload_file(request):
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('success')
else:
form = DocumentForm()
return render(request, 'upload.html', {'form': form})模板设置
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">上传</button>
</form>| 配置项 | 说明 |
|---|---|
| MEDIA_ROOT | 文件存储的绝对路径 |
| MEDIA_URL | 文件访问的URL前缀 |
| upload_to | 可包含strftime格式,自动创建子目录 |
练习提示: 完成starter_code中的视图,处理POST请求并保存上传的文件。注意添加enctype属性。