在Django中,文件上传是一个常见的功能。在本节中,我们将通过一个简单的案例来展示如何在Django中实现文件上传。
创建Django项目与应用 首先,确保你已经安装了Django。如果还没有,可以通过以下命令进行安装:
接下来,我们创建一个新的Django项目和应用:
1 2 3 django-admin startproject myproject cd myprojectdjango-admin startapp uploads
在 settings.py
中注册我们的应用:
1 2 3 4 5 INSTALLED_APPS = [ ... 'uploads' , ]
配置文件上传设置 我们需要在 settings.py
中添加一些设置,来配置文件上传的目录和管理静态文件:
1 2 3 4 5 import osMEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media' )
MEDIA_URL
是用来访问上传文件的URL,而 MEDIA_ROOT
是文件在服务器上存储的物理路径。
创建上传表单 在 uploads
应用中,我们创建一个文件上传的表单。首先在 forms.py
中定义一个表单:
1 2 3 4 5 from django import formsclass 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 from django.shortcuts import renderfrom .forms import UploadFileFormdef 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.html
和 upload_success.html
文件。
upload.html:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <!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 <!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 from django.contrib import adminfrom django.urls import pathfrom uploads.views import upload_filefrom django.conf import settingsfrom django.conf.urls.static import staticurlpatterns = [ 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中实现文件上传的基本过程。在这个过程中,我们创建了一个表单来接受文件输入,并处理文件上传的逻辑。在实际应用中,你可以根据需要进行更多的文件处理和验证。