23 文件上传实战教程

23 文件上传实战教程

在Django中,文件上传是一个常见的功能。在本节中,我们将通过一个简单的案例来展示如何在Django中实现文件上传。

创建Django项目与应用

首先,确保你已经安装了Django。如果还没有,可以通过以下命令进行安装:

1
pip install django

接下来,我们创建一个新的Django项目和应用:

1
2
3
django-admin startproject myproject
cd myproject
django-admin startapp uploads

settings.py 中注册我们的应用:

1
2
3
4
5
# myproject/settings.py
INSTALLED_APPS = [
...
'uploads',
]

配置文件上传设置

我们需要在 settings.py 中添加一些设置,来配置文件上传的目录和管理静态文件:

1
2
3
4
5
# myproject/settings.py
import os

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

MEDIA_URL 是用来访问上传文件的URL,而 MEDIA_ROOT 是文件在服务器上存储的物理路径。

创建上传表单

uploads 应用中,我们创建一个文件上传的表单。首先在 forms.py 中定义一个表单:

1
2
3
4
5
# uploads/forms.py
from django import forms

class UploadFileForm(forms.Form):
file = forms.FileField(label='选择文件')

创建视图处理上传逻辑

接下来,在 views.py 中创建一个视图来处理文件上传的逻辑:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# uploads/views.py
from django.shortcuts import render
from .forms import UploadFileForm

def upload_file(request):
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
handle_uploaded_file(request.FILES['file'])
return render(request, 'uploads/upload_success.html')
else:
form = UploadFileForm()
return render(request, 'uploads/upload.html', {'form': form})

def handle_uploaded_file(f):
with open(os.path.join(MEDIA_ROOT, f.name), 'wb+') as destination:
for chunk in f.chunks():
destination.write(chunk)

在上面的代码中,handle_uploaded_file 函数负责将上传的文件保存到服务器的 MEDIA_ROOT 目录中。

创建模板

现在我们需要创建上传文件的模板。在 uploads 应用中创建一个 templates/uploads 目录,并在其中创建 upload.htmlupload_success.html 文件。

upload.html:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!-- uploads/templates/uploads/upload.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<h1>上传文件</h1>
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form }}
<button type="submit">上传</button>
</form>
</body>
</html>

upload_success.html:

1
2
3
4
5
6
7
8
9
10
11
12
<!-- uploads/templates/uploads/upload_success.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>上传成功</title>
</head>
<body>
<h1>文件上传成功!</h1>
<a href="{% url 'upload_file' %}">继续上传</a>
</body>
</html>

配置URL

最后,我们需要在 urls.py 中配置访问的路由。在 myproject/urls.py 中添加上传的URL:

1
2
3
4
5
6
7
8
9
10
11
# myproject/urls.py
from django.contrib import admin
from django.urls import path
from uploads.views import upload_file
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
path('admin/', admin.site.urls),
path('upload/', upload_file, name='upload_file'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

测试文件上传功能

现在我们可以运行Django开发服务器并测试文件上传功能:

1
2
python manage.py migrate
python manage.py runserver

在浏览器中访问 http://127.0.0.1:8000/upload/,你应该能够看到上传表单。选择一个文件并点击“上传”按钮,随后你将看到上传成功的页面。

media 目录下,你可以找到你上传的文件。

总结

这就是在Django中实现文件上传的基本过程。在这个过程中,我们创建了一个表单来接受文件输入,并处理文件上传的逻辑。在实际应用中,你可以根据需要进行更多的文件处理和验证。

23 文件上传实战教程

https://zglg.work/django/23/

作者

AI教程网

发布于

2024-08-08

更新于

2024-08-10

许可协议