Download Django File

Here is the code in the views:

def index(request): if request.method == 'POST': a=request.POST # logging.debug(a["title"]) # logging.debug(a["file"]) #form = UploadFileForm() form = UploadFileForm(request.POST, request.FILES) #handle_uploaded_file(request.FILES['file']) if form.is_valid(): handle_uploaded_file(request.FILES['file']) return HttpResponseRedirect('/') else: form = UploadFileForm() return render('upload.html', {'form': form}) def handle_uploaded_file(file): # logging.debug("upload_here") if file: destination = open('/tmp/'+file.name, 'wb+') #destination = open('/tmp', 'wb+') for chunk in file.chunks(): destination.write(chunk) destination.close() 

Here is the code in the models:

 class UploadFileForm(forms.Form): title = forms.CharField(max_length=50) file = forms.FileField(type="file") 

Here is the code in upload.html:

 {% block upload %} <form enctype="multipart/form-data" method="post" action="/upload/"> {% csrf_token %} <table> <tr><td> <input type="file" value="title" name="title" id="title" /><br /> <input type="submit" value="Submit" id="Save"/> </td></tr> </table> </form> {% endblock %} 

After selecting the file, click the submit button, an error message will appear:

AttributeError at / upload /

'WSGIRequest' object has no 'chunks' attributes

Request Method: POST Request URL: http://www.mywebsite.com/upload/ Django Version: 1.3 Exception Type: AttributeError Exclusive Value:

'WSGIRequest' object has no 'chunks' attributes

Exception Location: /usr/src/wpcms/views.py in handle_uploaded_file, line 63

Any ideas what I'm doing wrong here? I forgot the settings bar? Or an import line? Thanks.

settings.py:

 TEMPLATE_LOADERS = ( 'django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader', ) MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'cms.middleware.page.CurrentPageMiddleware', 'cms.middleware.user.CurrentUserMiddleware', 'cms.middleware.toolbar.ToolbarMiddleware', 'cms.middleware.media.PlaceholderMediaMiddleware', 'django.middleware.doc.XViewMiddleware', 'django_authopenid.middleware.OpenIDMiddleware', ) TEMPLATE_CONTEXT_PROCESSORS = ( 'django.core.context_processors.auth', 'django.core.context_processors.debug', 'django.core.context_processors.i18n', 'django.core.context_processors.request', 'django.core.context_processors.media', 'cms.context_processors.media', 'django_authopenid.context_processors.authopenid', ) CMS_TEMPLATES = ( # ('basic.html', 'Basic Template'), # ('template_1.html', 'Template One'), # ('template_2.html', 'Template Two'), ('home.html', gettext('Default')), ('about.html', gettext('About')), # ('blog.html', gettext('blog')), ('contact.html', gettext('Contact')), ) ROOT_URLCONF = 'urls' CMS_APPLICATIONS_URLS = ( ('cmsplugin_news.urls', 'News'), ) CMS_NAVIGATION_EXTENDERS = ( ('cmsplugin_news.navigation.get_nodes', 'News navigation'), ) THUMBNAIL_PROCESSORS = ( 'easy_thumbnails.processors.colorspace', 'easy_thumbnails.processors.autocrop', #'easy_thumbnails.processors.scale_and_crop', 'filer.thumbnail_processors.scale_and_crop_with_subject_location', 'easy_thumbnails.processors.filters', ) CMS_MODERATOR = False TEMPLATE_DIRS = ( os.path.join(PROJECT_DIR, 'templates'), ) INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.admin', 'django.contrib.comments', 'registration', 'django_authopenid', 'cms', 'menus', 'mptt', 'appmedia', 'south', 'cms.plugins.text', 'cms.plugins.picture', 'cms.plugins.link', 'cms.plugins.file', 'easy_thumbnails', 'filer', 'cmsplugin_filer_file', 'cmsplugin_filer_folder', 'cmsplugin_filer_image', 'cmsplugin_filer_teaser', 'cmsplugin_filer_video', 'cms.plugins.snippet', 'cms.plugins.googlemap', 'publisher', 'reversion', 'cms.plugins.teaser', 'cms.plugins.video', 'cms.plugins.twitter', 'cmsplugin_facebook', 'cmsplugin_news', 'cmsplugin_comments', 'captcha', ) 
+6
source share
1 answer

There are several issues. Here is a fixed version that works:

1) Modify your template to use the actual form:

 <form enctype="multipart/form-data" method="post" action="/upload/"> {% csrf_token %} <table> {{form.as_table}} </table> <input type="submit" value="Submit" id="Save"/> </form> 

2) Update the form to remove the unnecessary type in FileField:

 class UploadFileForm(forms.Form): title = forms.CharField(max_length=50) file = forms.FileField() 

3) Update the view to add CSRF:

 def index(request): if request.method == 'POST': a=request.POST form = UploadFileForm(request.POST, request.FILES) if form.is_valid(): handle_uploaded_file(request.FILES['file']) return HttpResponseRedirect('/') else: form = UploadFileForm() c = {'form': form} c.update(csrf(request)) return render_to_response('upload.html', c) 

Hope this helps!

+10
source

Source: https://habr.com/ru/post/885420/


All Articles