Python Django文件上传完整指南:从配置到实现
本文详细讲解在Python Django框架中实现文件上传的标准流程。内容涵盖settings.py中的MEDIA_ROOT配置、Model中ImageField的使用及自定义upload_to函数、Form表单的构建、视图层对POST请求的处理以及模板中multipart/form-data的设置。同时附带URL映射配置及简单的文件下载示例,帮助开发者快速掌握Django文件处理核心机制。
Django文件上传概述
介绍Django中实现文件上传的最基础且符合官方规范的方法。
配置Media路径与数据模型
第一步:配置媒体文件路径。
需要在项目的settings.py文件中进行相关设置。
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
第二步:定义数据模型(Model)。
import os
from django.db import models
from django.utils.timezone import now as timezone_now
def upload_to(instance, filename):
now = timezone_now()
base, ext = os.path.splitext(filename)
ext = ext.lower()
return f'quotes/{now:%Y/%m/%Y%m%d%H%M%S}{ext}'
class Quote(models.Model):
class Meta:
verbose_name = 'quote'
verbose_name_plural = verbose_name
author = models.CharField('author', max_length=200)
quote = models.TextField('quote')
picture = models.ImageField('picture', upload_to=upload_to, blank=True, null=True)
def __str__(self):
return self.quote
其中定义的upload_to函数会自动将上传文件的名称修改为基于日期的格式,从而避免文件名冲突。
相关推荐:《Python视频教程》

构建表单与视图逻辑
第三步:添加HTML表单(form)。
在forms.py文件中定义表单类。
from django import forms
from .models import Quote
class QuoteForm(forms.ModelForm):
class Meta:
model = Quote
fields = '__all__'
第四步:编写处理文件上传的视图代码。
from django.shortcuts import render, redirect
from .forms import QuoteForm
def add_quote(request):
form = QuoteForm()
if request.method == 'POST':
form = QuoteForm(
data=request.POST,
files=request.FILES
)
if form.is_valid():
form.save()
return redirect('quote:add_quote')
else:
return render(request, 'quotes/add_quote.html', {
'form': form
})
第五步:编写对应的HTML模板代码。
<form action="{% url 'quote:add_quote' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">save</button>
</form>
URL映射与模板实现
第六步:添加URL路由映射。
在app的目录的urls.py添加
from django.urls import path
from quotes.views import add_quote
app_name = 'quote'
urlpatterns = [
path('add/', add_quote, name='add_quote')
]
在项目根目录的urls.py文件中配置路由。
from django.urls import path, include
urlpatterns = [
path('quotes/', include('quotes.urls', namespace='quote'))
]
运行效果展示。

文件下载功能扩展
知识点扩展:
实现最简单的文件下载功能。
只需将文件内容读取到HttpResponse对象中即可返回,具体示例如下。
def file_download(request):
# do something...
with open('file_name.txt') as f:
c = f.read()
return HttpResponse(c)
至此,关于Python中Django文件上传方法的详细教程已介绍完毕。如需了解更多Django文件上传相关内容,建议搜索本站历史文章或继续阅读后续相关文章。感谢大家的支持!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













