2009-03-04 42 views
5

没有人有Django的+ SWFUpload任何简单的代码示例?我已经在我的PHP应用程序中完美工作,但Django让我头疼。Django + SWFUpload的代码示例?

+2

-1:无码。 -1:无错误追踪或其他消息。 – 2009-03-05 00:30:52

回答

17

不幸的是我不能给你任何非常详细的代码示例,但我有相当多的经验与SWFUpload的+ Django的工作(相片分享网站,我的工作)。无论如何,这里有几个要点,希望能帮助你在你追求幸福DjSWF :)

  1. 您将要使用的cookie插件(当然,如果你正在使用某种形式的基于会话的认证[如django.contrib.auth,并关心谁上传了什么)。

    的饼干插件从饼干作为POST发送数据,所以你必须找得到这回request.COOKIESprocess_request中间件在request.POST在特定网址上寻找一个settings.SESSION_COOKIE_NAME并转储到request.COOKIES作品起到了很好的一些方法这个:)

  2. 另外,请记住,你必须东西在响应身体的SWFUpload将其识别为一个成功上传的尝试。我相信这已经在SWFUpload的最新测试版改变了,但无论如何,它的建议只是坚持东西在那里,像“OK”。对于故障,请使用类似HttpResponseBadRequest之类的东西。

  3. 最后,如果您无法找到他们,上传的文件是在request.FILES :)

如果您有什么困惑我还没有涉及,随意张贴的东西更详细我很乐意提供帮助。

+4

这是一个非常糟糕的问题的绝佳答案。第(1)点的第二段特别有助于我。谢谢。 – bouvard 2009-05-12 03:46:16

0

以下是我修复此问题(即我上传在Firefox中未能以302重定向)具体的Django的实现。

在我最初认为它与上传生成的页面,我看着饼干和发现的SessionID

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

当我看到什么被张贴在SWFUploadMiddleware(使用Firefox时)我发现sessionid没有被设置。

在我生成一个包含上传处理程序的页面INTIAL看法,我加入了会话ID上下文。

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']