Django + SWFUpload的代码示例?

时间:2009-03-04 22:21:08

标签: python django swfupload

Django + SWFUpload是否有任何简单的代码示例?我在PHP应用程序中完美运行,但Django让我很头疼。

3 个答案:

答案 0 :(得分:17)

不幸的是,我不能给你任何非常详细的代码示例,但我有很多使用SWFUpload + Django的经验(对于我工作的照片共享网站)。无论如何,这里有一些指针可以帮助你追求对DjSWF的快乐:)

  1. 你会想要使用cookies插件(如果你当然使用某种基于会话的身份验证[如django.contrib.auth,并关心谁上传了什么)。

    Cookie插件会将Cookie中的数据作为POST发送,因此您必须找到一些方法将其恢复到request.COOKIESprocess_request中间件,以查找settings.SESSION_COOKIE_NAME in关于特定网址的request.POST并将其转储到request.COOKIES,可以很好地解决这个问题:)

  2. 此外,请记住,必须在SWFUpload的响应正文中返回一些内容,以将其识别为成功上传尝试。我相信这在SWFUpload的最新测试版中已经发生了变化,但无论如何,建议只在那里贴一些像'ok'的东西。对于失败,请使用HttpResponseBadRequest之类的内容。

  3. 最后,如果您在查找时遇到问题,则上传的文件位于request.FILES:)

  4. 如果您有任何困惑我没有报道,请随时发布更详细的内容,我将很乐意为您提供帮助。

答案 1 :(得分:3)

SWFUpload示例的Django版本:

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

这么长的uploadify。好主意,但它只是马车,尤其是在Windows上。

答案 2 :(得分:0)

以下是我修复此问题的特定于Django的实现(即我的上传在使用302重定向的Firefox中失败)。

在我的初始视图中生成带有上传器的页面,我查看了cookie并找到了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时,我可以看到正在发布的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']