Yeg*_*sky 8 python django file-upload django-forms
我的形式有ImageField.正如我发现它使用枕头来验证文件实际上是一个图像.这部分很棒,但我还需要在此表单字段中允许使用pdf.
因此它应检查该文件是否为image,如果不是,请检查它是否为pdf,然后加载并存储.
如果pdf检查可以真正检查文件格式,那就太好了,但只是扩展检查就足够了.
如果您forms.ImageField在表单中使用,则无法执行此操作.您需要使用,forms.FileField因为如果文件不是ImageField图像,ValidationError则仅验证图像并引发.
这是一个例子:
models.py
class MyModel(models.Model):
image = models.ImageField(upload_to='images')
Run Code Online (Sandbox Code Playgroud)
forms.py
import os
from django import forms
from .models import MyModel
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
fields = ['image']
image = forms.FileField()
def clean_image(self):
uploaded_file = self.cleaned_data['image']
try:
# create an ImageField instance
im = forms.ImageField()
# now check if the file is a valid image
im.to_python(uploaded_file)
except forms.ValidationError:
# file is not a valid image;
# so check if it's a pdf
name, ext = os.path.splitext(uploaded_file.name)
if ext not in ['.pdf', '.PDF']:
raise forms.ValidationError("Only images and PDF files allowed")
return uploaded_file
Run Code Online (Sandbox Code Playgroud)
虽然上面的代码正确地验证了图像的有效性(通过调用ImageField.to_python()方法)但是为了确定文件是否是PDF,它只检查文件扩展名.要实际验证PDF是否有效,您可以尝试解决此问题:检查PDF文件是否有效(Python).此方法尝试读取内存中的整个文件,如果文件太大,可能会耗尽服务器的内存.
| 归档时间: |
|
| 查看次数: |
1554 次 |
| 最近记录: |