Найти - Пользователи
Полная версия: FileUpload (POST) in Django version 1.2.1 & CSRF token missing
Начало » Django » FileUpload (POST) in Django version 1.2.1 & CSRF token missing
1
jingvar
FileUpload (POST) in Django version 1.2.1 & CSRF token missing

django-admin.py startproject demo
cd demo
mkdir templates

Нужно банально отгрузить файл на сервер
смотрим в http://docs.djangoproject.com/en/1.2/topics/http/file-uploads/

Догадываемся создать файл forms.py
from django import forms

class UploadFileForm(forms.Form):
title = forms.CharField(max_length=50)
file = forms.FileField()
Догадываемся создать файл views.py
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response
from forms import * #тоже догадываемся
# Imaginary function to handle an uploaded file.
from somewhere import handle_uploaded_file

def upload_file(request):
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
handle_uploaded_file(request.FILES['file'])
return HttpResponseRedirect('/success/url/')
else:
form = UploadFileForm()
return render_to_response('upload.html', {'form': form})
Догадываемся про в url.py
from views import *
(r'^upload/', upload_file),


Догадываемся добавить в settings.py TEMPLATE_DIRS = ( ‘templates’,
Догадываемя покласть в /templates/upload.html

О его содержимом тоже догадываемся.
<form action="" method="post" enctype="multipart/form-data">  
{{form}}
<input type="submit" value="Send">
</form>
Запускаем
и http://127.0.0.1:8000/upload/

Ух ты формочка нарисовалась.
Проверяем - делаем отправку формы с незаполненными полями
CSRF verification failed. Request aborted.
Reason given for failure:
CSRF token missing or incorrect.


Хмм

Ладно отправляем все правильно заполненное.
Результат аналогичен.

Может кто поделится соображениями или примером того как отправить файл.
amigo
http://docs.djangoproject.com/en/1.2/ref/contrib/csrf/

<form action="" method="post">{% csrf_token %}
jingvar
amigo
http://docs.djangoproject.com/en/1.2/ref/contrib/csrf/

<form action="" method="post">{% csrf_token %}
Добавил, теже грабли.

Более того пример из ссылки не работает, т.к.
Если вставить:

c = {}
c.update(csrf(request))
return render_to_response('upload.html', {'form': form}, c)
в upload html
 <form action="" method="post" enctype="multipart/form-data"{% csrf_token %} {{c}} >
'dict' object has no attribute ‘render_context’

return render_to_response('upload.html', {'form': form}, c)
amigo
Надо ещё раз перечитать раздел в документации и не пихать всё подряд из примеров.
jingvar
amigo
Надо ещё раз перечитать раздел в документации и не пихать всё подряд из примеров.
Совет претендует на оригинальность?
А можно сирому и убогому по документации дать рабочий пример?
amigo
Проверьте наличие middleware и шаблоне формы напишите тег что выше дан. Ничего во вьюхи писать не требуется.
MasterCody
from django.template import RequestContext

...

return render_to_response('upload.html', {'form': form}, context_instance=RequestContext(request))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB