2009-03-04 2 views
5

У кого-нибудь есть простые примеры кода для Django + SWFUpload? Я отлично работаю над своим PHP-приложением, но Django дает мне головные боли.Примеры кода для Django + SWFUpload?

+2

-1: Нет Код. -1: Нет ошибки Traceback или других сообщений. –

ответ

17

К сожалению, я не могу дать вам очень подробные образцы кода, но у меня есть довольно много опыта работы с SWFUpload + Django (для совместного использования фотографий, на котором я работаю). Во всяком случае, вот несколько советов, которые, надеюсь, помогут вам в ваших поисках DjSWF счастья :)

  1. Вы хотите использовать плагин печенье (если, конечно, вы используете какое-то аутентификация сеанса на основе [как django.contrib.auth, и забота, кто загрузил что).

    печений плагин отправляет данные из куки как POST, так что вам придется найти какой-нибудь способ получить это обратно в request.COOKIES (process_request промежуточного слоя, который выглядит для settings.SESSION_COOKIE_NAME в request.POST на конкретных URL-адресов и сваливает его в request.COOKIES работ красиво для этого :)

  2. Также помните, что вы должны вернуть что-то в тело ответа для SWFUpload, чтобы распознать его как успешную попытку загрузки. Я считаю, что это изменилось в последней бета-версии SWFUpload, но в любом случае целесообразно просто вставить что-то там, как «хорошо». Для отказов используйте что-то вроде HttpResponseBadRequest или тому подобное.

  3. Наконец, в случае, если у вас возникли проблемы с поиском их, загруженный файл находится в request.FILES :)

Если у вас есть что-нибудь запутанное я не покрыл, не стесняйтесь отправлять что-то более подробным и я буду рад помочь.

+4

Это отличный ответ на действительно страшный вопрос. Второй пункт пункта (1) мне помог, в частности. Благодарю. – bouvard

0

Ниже приведена моя реализация, специфичная для Django, для исправления этой проблемы (например, мои загрузки не работают в Firefox с 302 Redirect).

В моем изначальном виде, который генерирует страницу с пользователя на нее, я смотрел на печенье и нашел SessionID

ipdb> self.request.COOKIES 
{'csrftoken': '43535f552b7c94563ada784f4d469acf', 'sessionid': 'rii380947wteuevuus0i5nbvpc6qq7i1'} 

Когда я смотрел на то, что в настоящее время размещено в SWFUploadMiddleware (при использовании Firefox), Я обнаружил, что сеанс не был установлен.

В моем внутреннем представлении, которое генерирует страницу, содержащую обработчик загрузки, я добавил sessionid в контекст.

context['sessionid'] = self.request.session.session_key 

В моих настройках swfuploader, я добавил SessionID к опции после Params следующим образом:

post_params: {... "sessionid": "{{ sessionid }}" ...}, 

Теперь, когда я посмотрел в SWFUploadMiddleware, я мог видеть SessionID быть вывешенным, и мои загрузки начали работать, если Firefox.

ipdb> request.POST 
<QueryDict: {... u'session_id': [u'rii380947wteuevuus0i5nbvpc6qq7i1'],...}> 

Для полноты, мой SWFUploadMiddleware выглядит так ...

from django.conf import settings 
from django.core.urlresolvers import reverse 

class SWFUploadMiddleware(object): 
    def process_request(self, request): 
     if (request.method == 'POST') and (request.path == reverse('upload_handler')) and request.POST.has_key(settings.SESSION_COOKIE_NAME): 
      request.COOKIES[settings.SESSION_COOKIE_NAME] = request.POST[settings.SESSION_COOKIE_NAME] 
    # http://stackoverflow.com/questions/6634666/403-forbidden-error-on-swfupload-and-django 
    # Fix for problem uploading images (403 error) in Firefox 20 and others 
    if request.POST.has_key('csrftoken'): 
      request.COOKIES['csrftoken'] = request.POST['csrftoken'] 
Смежные вопросы