Django实现文件上传功能的完整步骤与代码解析

Leo
Leo
发布时间:2026-10-13 | 4人浏览过
原创

本文详细介绍如何在Django项目中实现文件上传功能。涵盖项目配置、Media目录设置、模型定义、路由分发、视图函数编写及前端模板开发。通过实例代码演示如何保存文件路径至数据库并将实际文件存储至指定目录,帮助开发者快速掌握Django文件处理核心流程。

Django项目配置与媒体目录设置

首先,新建Django项目,并在主配置文件中调整相关设置。


ALLOWED_HOSTS = ['127.0.0.1','localhost']
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), MEDIA_ROOT]

在项目根目录下创建一个与 manage.py 同级名为 media 的目录。在该 media 文件夹内,再新建一个子目录用于存放上传的文件,例如命名为 headpics,以此模拟保存用户选择的头像文件。

创建应用与模型定义

接下来,创建一个新的应用(App),此处将该应用命名为 uploadFile。

在终端执行以下命令来创建该应用:

python manage.py startapp uploadFile

进入 uploadFile 应用目录,打开 models.py 文件,并添加如下模型定义代码:


from django.db import models

class User(models.Model):
 name = models.CharField(max_length=12)
 file = models.FileField(upload_to='headpics')

务必确保在主配置文件的 INSTALLED_APPS 列表中注册了该应用。

随后,在控制台依次执行以下命令以生成并应用数据库迁移:


python manage.py makemigrations uploadFile
python manage.py migrate uploadFile

路由配置与视图函数编写

第三步,配置项目的 URL 路由。

在主路由模块(urls.py)中添加如下代码:


from django.contrib import admin
from django.urls import path,include

urlpatterns = [
 path('admin/', admin.site.urls),
 path('index/',include("uploadFile.urls")),
]

其中 admin 是 PyCharm 自动生成的配置,若不需要可将其删除。

接着,在 uploadFile 应用目录下新建 urls.py 模块,用于编写二级路由。

在二级路由文件中添加如下代码:


from django.urls import path
from . import views

app_name = 'upload'
urlpatterns = [
 path('file/',views.userfile,name='userfile'),
 path('file/detail/',views.detailFile,name='delfile'),
]

第四步,编写处理文件上传的视图函数。

在 uploadFile 应用的 views.py 文件中添加如下视图逻辑:


from django.shortcuts import render,get_object_or_404
from django.http import HttpResponse
import uuid,os
from .models import User
# Create your views here.
def userfile(request):
 return render(request,'uploadFile/uploadFile.html')
def detailFile(request):
 if request.method == "POST":
  name = request.POST.get('name')
  file = request.FILES.get('file',None)
  if not file:
   return HttpResponse("<p>您还未上传头像!</p>")
  file.name = getUUID(file.name)
  user = User.objects.create(name=name, file=file)
  with open(os.path.join("D:\\upload",file.name),'wb+') as relfile:
   for crunk in file.chunks():
    relfile.write(crunk)
  return HttpResponse("<p>上传成功!</p>")
 else:
  pass
def getUUID(filename):
 id = str(uuid.uuid4())
 extend = os.path.splitext(filename)[1]
 return id+extend

前端模板开发与功能测试

第五步,编写前端模板以支持文件上传界面。

在 uploadFile 目录下新建 templates 目录,并在其下建立 uploadFile 子目录,最后在该子目录下创建一个名为 uploadFile.html 的模板文件。

在该 HTML 文件中粘贴如下模板代码:


<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>upload</title>
</head>
<body>
 <form action="{% url 'upload:delfile' %}" method="post" enctype="multipart/form-data">
  {% csrf_token %}
  昵称 :<input type="text" name="name"><br><br>
  头像 : &nbsp;<input type="file" name="file"><br><br>
  <input type="submit" value="提交">
 </form>
</body>
</html>

至此,基础功能开发完成。

启动服务后,在浏览器访问 http://127.0.0.1:8000/index/file/ 即可看到界面效果,如下图所示:

输入相关信息并点击提交后,数据会实时保存至数据库。需要注意的是,数据库中 file 字段实际存储的是文件的路径字符串。

同时,上传的文件会被保存至之前创建的 upload 文件夹中。

您可以尝试扩展功能,例如在提交成功后返回一个展示效果页面。

总结

以上介绍了 Django 文件上传功能的完整实例代码,希望能为您的开发提供 helpful 参考。

本站声明

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

Python 相关产品和应用

全部下载

专题列表