Примеры кода для Django + SWFUpload? - PullRequest
5 голосов
/ 05 марта 2009

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

Ответы [ 3 ]

17 голосов
/ 05 марта 2009

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

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

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

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

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

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

3 голосов
/ 23 августа 2009

Django версия образцов для SWFUpload:

http://github.com/naltimari/django-swfupload-samples/tree/master

Так долго загружать. Отличная идея, но она просто глючит, особенно в Windows.

0 голосов
/ 01 июля 2014

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

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

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

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

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

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

В моих настройках swfuploader я добавил sessionid к опции post-params следующим образом:

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

Теперь, когда я посмотрел в SWFUploadMiddleware, я увидел, что сессионный идентификатор был опубликован, , и мои загрузки начали работать, если 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']
...