You can process Dropzone messages like any other message in a multi-page form.
This is how I continue:
@login_required
@usertype_required
def upload_picture(request, uid=None):
"""
Photo upload / dropzone handler
:param request:
:param uid: Optional picture UID when re-uploading a file.
:return:
"""
form = PhotoUploadForm(request.POST, request.FILES or None)
if form.is_valid():
pic = request.FILES['file']
picture = ...
picture.file = pic
picture.save()
return HttpResponse('Image upload succeeded.')
return HttpResponseBadRequest("Image upload form not valid.")
Simple dead form
class PhotoUploadForm(forms.Form):
file = forms.ImageField(required=True)
In your model you need to set upload_to:
class Picture(models.Model):
[...]
file = models.ImageField(upload_to=get_upload_path)
And here is my linker for load paths, but you can put something
def get_upload_path(instance, filename):
""" creates unique-Path & filename for upload """
ext = filename.split('.')[-1]
filename = "%s.%s" % (instance.p_uid, ext)
d = datetime.date.today()
username = instance.author.username
return os.path.join(
'userpics', username, d.strftime('%Y'), d.strftime('%m'), filename
)
, csrf_token html ( angularJS , )
<form action="{% url 'upload_picture' %}" class="dropzone" drop-zone>
{% csrf_token %}
<div class="fallback">
<h3>Your browser is not supported.</h3>
<strong>
<a href="https://browser-update.org/update.html" target="_blank">Click here for instructions on how to update it.</a>
</strong>
<p>You can still try to upload your pictures through this form: </p>
<p>
<input name="file" type="file" multiple />
<input type="submit" value="Upload" />
</p>
</div>
</form>