新手 Django 问题。我在模型上有一个 ImageField,我正在向其上传文件。上传工作正常,除了当我上传不是图像的文件时没有收到 ValidationErrors。这显然不利于安全。full_clean 非常适合我的 URLField 和 EmailField,但不适用于 ImageField。
我的模型中的内容摘要:
class Thing(models.Model):
name = models.CharField(max_length=60, unique=True)
email = models.EmailField(max_length=254)
home = models.URLField()
image = models.ImageField(upload_to=uploader, blank=True, null=True)
admins = models.ManyToManyField(User)
def save(self, *args, **kwargs):
self.full_clean()
super(Thing, self).save(*args, **kwargs)
在我的观点和我的测试中发生的事情的摘要:
from django.core.exceptions import ValidationError
from django.test.client import Client
#In views.py
#This is the view for the URL things/[id]
#Modifies an existing model to upload an image to it
def thing(request, thing_id):
try:
thing = Thing.objects.get(pk=int(thing_id))
except:
raise Http404
if request.method == 'POST':
thing.image = request.FILES.get('image')
try:
thing.save()
except ValidationError as e:
return HttpResponseBadRequest("Error message here")
return HttpResponse(status=201)
#In tests.py
#This should not work; 'tests.py' is not an image
with open('myapp/tests.py') as f:
response = Client().post('/things/1', {'image': f})
print response.content, response.status_code
#I get that the HTTP status code = 201, not = 400.
我找到了大量关于如何使用表单执行此操作的信息,但我不想使用表单。我正在创建一个 REST API / Web 服务,并且不需要在任何地方的模板中嵌入表单,因此表单似乎是不必要的工作。
Django ImageField 验证(是否足够)?涵盖 ImageField 验证的工作原理,但不包括我如何实现它。
谢谢你的建议!