从应用程序(iOS android等)发布而不是网络表单。
class someImage(models.Model):
image = models.ImageField(upload_to= settings.SHARE_IMAGE_UPLOAD_PATH)
@csrf_exempt
def saveImage(request):
如何写视图?它在邮件请求中接收图像。 我发现的每件事都与表格相关(服务器新手)
答案 0 :(得分:15)
仅仅因为您没有使用实际的HTML表单来提交数据并不意味着您无法使用ModelForm
来处理请求:
from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseNotAllowed
from django.utils import simplejson
def upload_view(request):
if request.method == 'POST':
form = UploadForm(request.POST, request.FILES)
if form.is_valid():
form.save()
result = {'success': True}
return HttpResponse(simplejson.dumps(result), mimetype='application/json')
else:
return HttpResponseBadRequest()
else:
return HttpResponseNotAllowed(['POST'])
答案 1 :(得分:4)
修改强> 请使用上面选择的答案 - 以下代码适用于该问题但不建议使用。
您要上传的图片文件可在以下网址找到:
request.FILES['image'] # assuming input name is called 'image'
它不会返回Image对象,而是返回UploadedFile对象。你可以阅读这部分文档(我假设你使用的是Django 1.3.x):https://docs.djangoproject.com/en/1.3/topics/http/file-uploads/#handling-uploaded-files
它涵盖了UploadedFile对象中可用的字段和方法,也是手动处理文件上载的常用方法。您可以使用相同的方法将图像文件写入文件对象,然后将其保存到ImageField。
以下代码应该可以使用,但它不是安全的代码。我假设您正在使用* nix机器,如果没有,请将目标文件保存在其他地方。
@csrf_exempt
def saveImage(request):
# warning, code might not be safe
up_file = request.FILES['image']
destination = open('/tmp/' + up_file.name , 'wb+')
for chunk in up_file.chunks():
destination.write(chunk)
destination.close()
img = someImage()
img.image.save(up_file.name, File(open('/tmp/' + up_file.name, 'r')))
img.save()
# return any response you want after this
需要注意的其他事项:确保您的表单具有以下属性:
<form enctype="multipart/form-data" ... >
我不记得这种用法是正常的,但实际上,建议使用表格。