Django / UploadFileForm 仅提供无效表单?
我尝试用Django创建一个简单的文件上传功能,使用了以下代码和文件:
这些内容大致是从这个例子中拿来的:https://docs.djangoproject.com/en/5.0/topics/http/file-uploads/
forms.py:
from django import forms
class UploadFileForm(forms.Form):
title = forms.CharField(max_length=50)
file = forms.FileField()
views.py:
from django.http import HttpResponseRedirect
from django.shortcuts import render
from .forms import UploadFileForm
import os
import sys
def handle_uploaded_file(f):
path = os.path.abspath(os.path.dirname(sys.argv[0]))
fnFile = os.path.join(path, "gpp", "FILES", "QUESTIONS", "someFile.xyz")
print(fnFile)
with open(fnFile, 'wb+') as destination:
for chunk in f.chunks():
destination.write(chunk)
def home(request):
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
print(request.POST)
print(request.FILES)
if form.is_valid():
print(f"Valid form")
handle_uploaded_file(request.FILES['file'])
return HttpResponseRedirect('/success/url/')
else:
print("No valid form")
else:
form = UploadFileForm()
return render(request, 'home.html', {'form': form})
总体来看,表单看起来没问题,我可以选择文件:
但是当我输入一些内容时,它却不工作,日志中显示了以下内容:
[23/Mar/2024 10:02:35] "GET / HTTP/1.1" 200 1777
<QueryDict: {'csrfmiddlewaretoken': ['HWaddf1sBsKJc1k4CY9LiijIv1VAlxjWkRoFRixEP12rNDYyIx6zRYFC2MvPKIFm'], 'title': ['Test'], 'file': ['gpt.zip'], 'save': ['']}>
<MultiValueDict: {}>
No valid form
[23/Mar/2024 10:04:33] "POST / HTTP/1.1" 200 1869
所以看起来request.FILES出于某种原因是空的?为什么这没有按预期工作呢?
1 个回答
1
你忘了设置表单的 enctype="…"
[mdn-doc] 属性,这样才能同时上传数据和文件:
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form }}
</form>