在 Django 中,处理简单文件上传通常需要使用 FileField 和 ModelForm。以下是一个简单的例子,演示如何在 Django 4.0 中进行简单的文件上传。

首先,定义一个模型,例如在你的应用的 models.py 文件中:
# models.py
from django.db import models

class UploadedFile(models.Model):
    file = models.FileField(upload_to='uploads/')

在这个例子中,我们定义了一个 UploadedFile 模型,其中包含一个 FileField,它将文件保存在 uploads/ 目录下。upload_to 参数定义了文件上传的目标路径。

接下来,创建一个 ModelForm,它将与上述模型一起使用,以便更轻松地处理表单:
# forms.py
from django import forms
from .models import UploadedFile

class FileUploadForm(forms.ModelForm):
    class Meta:
        model = UploadedFile
        fields = ['file']

然后,在你的应用的 views.py 文件中,创建一个视图函数来处理文件上传:
# views.py
from django.shortcuts import render, redirect
from .forms import FileUploadForm

def upload_file(request):
    if request.method == 'POST':
        form = FileUploadForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect('upload_success')
    else:
        form = FileUploadForm()
    return render(request, 'upload_form.html', {'form': form})

def upload_success(request):
    return render(request, 'upload_success.html')

在这个例子中,upload_file 视图函数处理文件上传表单的提交。如果表单是有效的,文件将被保存,并用户将被重定向到成功页面。

接下来,在你的应用的 urls.py 文件中,配置 URL 模式以调用上述视图:
# urls.py
from django.urls import path
from .views import upload_file, upload_success

urlpatterns = [
    path('upload/', upload_file, name='upload_file'),
    path('upload/success/', upload_success, name='upload_success'),
]

然后,在你的应用的 templates 目录下创建两个 HTML 模板文件,一个用于上传表单,另一个用于成功页面:
<!-- upload_form.html -->
<!DOCTYPE html>
<html>
<head>
    <title>File Upload</title>
</head>
<body>
    <h2>File Upload</h2>
    <form method="post" enctype="multipart/form-data">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Upload</button>
    </form>
</body>
</html>
<!-- upload_success.html -->
<!DOCTYPE html>
<html>
<head>
    <title>Upload Success</title>
</head>
<body>
    <h2>Upload Success</h2>
    <p>Your file has been uploaded successfully.</p>
</body>
</html>

最后,确保你的项目的主 urls.py 文件包含了你的应用的 URL 配置:
# project/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('myapp/', include('myapp.urls')),  # 假设你的应用名为 'myapp'
]

现在,当你访问 http://yourdomain.com/myapp/upload/ 时,将看到一个简单的文件上传表单。用户可以选择文件并点击 "Upload" 按钮进行文件上传。上传成功后,用户将被重定向到 http://yourdomain.com/myapp/upload/success/ 页面。确保适当地配置你的服务器以处理文件上传,并根据需要对上传的文件进行处理。这只是一个简单的例子,实际中可能需要更复杂的文件处理逻辑。


转载请注明出处:http://www.pingtaimeng.com/article/detail/7217/Django