我寫了一個Django應用程序供用戶上傳文件並查看上傳文件的列表。我想限制上傳只使用gif格式,並寫了一個簡單的驗證器。然後我在模型中傳遞驗證器,但它不會觸發,並且無論格式如何,都會保存文件。這是我到目前爲止。Django驗證器沒有觸發文件上傳
views.py
def list(request):
# Handle file upload
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
newdoc = Document(docfile=request.FILES['docfile'])
newdoc.save()
messages.add_message(request, messages.INFO, "Saved")
# Redirect to the document list after POST
return HttpResponseRedirect(reverse('list'))
else:
form = DocumentForm() # A empty, unbound form
# Load documents for the list page
documents = Document.objects.all()
# Render list page with the documents and the form
return render(
request,
'list.html',
{'documents': documents, 'form': form}
)
checkformat.py
def validate_file_type(upload):
if not (upload.name[-4:] == '.gif'):
raise ValidationError('File type not supported.')
models.py
from .checkformat import validate_file_type
def content_file_name(instance, filename):
return '/'.join(['documents', str(filename), filename])
class Document(models.Model):
docfile = models.FileField(upload_to=content_file_name, validators=[validate_file_type], null=False, verbose_name="File")
forms.py
class DocumentForm(forms.Form):
docfile = forms.FileField(
label='Select a file', widget=forms.FileInput(attrs={'accept':'image/gif'})
)
有我丟失的東西?我剛開始學習Django。另外,我知道這不是一種檢查文件類型的安全方式,但我只是想看到它繼續工作。感謝您的時間。
沒有太多的錯誤。嘗試'upload.name.lower.endswith('.gif')'儘管[-4:]確實是一樣的,但較低可能會有所作爲。 – e4c5
請顯示DocumentForm的代碼。 –
@DanielRoseman添加了DocumentForm代碼。 –