Python Django文件上传完整指南:从配置到实现

宋时安
宋时安
发布时间:2026-10-14 | 2人浏览过
原创

本文详细讲解在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文件上传相关内容,建议搜索本站历史文章或继续阅读后续相关文章。感谢大家的支持!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表