Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 23, 2010 12:03:17

jingvar
От:
Зарегистрирован: 2010-03-24
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

FileUpload (POST) in Django version 1.2.1 & CSRF token missing

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.


Хмм

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

Может кто поделится соображениями или примером того как отправить файл.



Офлайн

#2 Авг. 23, 2010 14:57:29

amigo
От:
Зарегистрирован: 2010-06-01
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

FileUpload (POST) in Django version 1.2.1 & CSRF token missing

http://docs.djangoproject.com/en/1.2/ref/contrib/csrf/

<form action="" method="post">{% csrf_token %}



Офлайн

#3 Авг. 23, 2010 15:31:46

jingvar
От:
Зарегистрирован: 2010-03-24
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

FileUpload (POST) in Django version 1.2.1 & CSRF token missing

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)



Офлайн

#4 Авг. 23, 2010 21:52:33

amigo
От:
Зарегистрирован: 2010-06-01
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

FileUpload (POST) in Django version 1.2.1 & CSRF token missing

Надо ещё раз перечитать раздел в документации и не пихать всё подряд из примеров.



Офлайн

#5 Авг. 24, 2010 08:21:01

jingvar
От:
Зарегистрирован: 2010-03-24
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

FileUpload (POST) in Django version 1.2.1 & CSRF token missing

amigo
Надо ещё раз перечитать раздел в документации и не пихать всё подряд из примеров.
Совет претендует на оригинальность?
А можно сирому и убогому по документации дать рабочий пример?



Офлайн

#6 Авг. 24, 2010 09:46:05

amigo
От:
Зарегистрирован: 2010-06-01
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

FileUpload (POST) in Django version 1.2.1 & CSRF token missing

Проверьте наличие middleware и шаблоне формы напишите тег что выше дан. Ничего во вьюхи писать не требуется.



Офлайн

#7 Авг. 26, 2010 14:49:35

MasterCody
От:
Зарегистрирован: 2010-04-05
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

FileUpload (POST) in Django version 1.2.1 & CSRF token missing

from django.template import RequestContext

...

return render_to_response('upload.html', {'form': form}, context_instance=RequestContext(request))



Отредактировано (Авг. 26, 2010 14:49:58)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version