Django 是一个高级的 Python Web 框架,它鼓励快速开发和干净、实用的设计。Django 表单(Forms)是 Django 提供的一个用于处理 HTML 表单的强大工具,它可以自动从用户提交的表单数据中创建 Python 数据结构,并且可以验证这些数据。
Django 表单主要分为以下几种类型:
假设我们有一个模型 Document
,它包含一个文件字段 file
,我们希望用户上传的文件能够保存到服务器上的特定文件夹。
# models.py
from django.db import models
class Document(models.Model):
file = models.FileField(upload_to='documents/')
# forms.py
from django import forms
from .models import Document
class DocumentForm(forms.ModelForm):
class Meta:
model = Document
fields = ['file']
# views.py
from django.shortcuts import render, redirect
from .forms import DocumentForm
def upload_file(request):
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('upload_success')
else:
form = DocumentForm()
return render(request, 'upload.html', {'form': form})
def upload_success(request):
return render(request, 'upload_success.html')
# urls.py
from django.urls import path
from .views import upload_file, upload_success
urlpatterns = [
path('upload/', upload_file, name='upload_file'),
path('success/', upload_success, name='upload_success'),
]
<!-- upload.html -->
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Upload</button>
</form>
<!-- upload_success.html -->
<h2>File uploaded successfully!</h2>
原因:
MEDIA_ROOT
和 MEDIA_URL
设置不正确。解决方法:
settings.py
中正确设置了 MEDIA_ROOT
和 MEDIA_URL
:# settings.py
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
media/documents/
目录存在并且有写权限。urls.py
中添加媒体文件的路由,以便在开发环境中能够访问上传的文件:# urls.py
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# ... your other url patterns ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
通过以上步骤,你应该能够成功地将用户上传的文件保存到指定的文件夹中。
领取专属 10元无门槛券
手把手带您无忧上云