Django + SWFUploadの簡単なコード サンプルはありますか? 私の PHP アプリケーションでは問題なく動作していますが、Django が頭を悩ませています。
3 に答える
残念ながら、非常に詳細なコード サンプルを提供することはできませんが、SWFUpload + Django (私が取り組んでいる写真共有サイト) を使用した経験はかなりあります。とにかく、DjSWF の幸福を追求する上で役立つと思われるいくつかの指針を以下に示します :)
Cookie プラグインを使用することをお勧めします (もちろん、ある種のセッションベースの認証を使用している場合は [
django.contrib.auth
、誰が何をアップロードしたかなど)。Cookie プラグインは Cookie からのデータを POST として送信するため、これを元に戻す何らかの方法を見つける必要があります
request.COOKIES
(特定の URL を探してダンプするミドルウェアは、このためにうまくprocess_request
機能します :)settings.SESSION_COOKIE_NAME
request.POST
request.COOKIES
また、SWFUpload がアップロード試行の成功として認識できるように、応答本文で何かを返す必要があることにも注意してください。これは SWFUpload の最新のベータ版で変更されたと思いますが、とにかく「OK」のようなものをそこに貼り付けることをお勧めします。失敗した場合は、
HttpResponseBadRequest
のようなものを利用してください。最後に、それらを見つけるのに問題がある場合に備えて、アップロードされたファイルは次の場所にあります
request.FILES
:)
私がカバーしていない当惑することがあれば、お気軽に、より詳細な情報を投稿してください。喜んでお手伝いさせていただきます。
SWFUpload のサンプルの Django バージョン:
http://github.com/naltimari/django-swfupload-samples/tree/master
長い間アップロードします。素晴らしいアイデアですが、特に Windows ではバグがあります。
以下は、この問題を修正するための Django 固有の実装です (つまり、私のアップロードは Firefox で 302 リダイレクトで失敗していました)。
アップローダーを含むページを生成する最初のビューで、Cookie を調べたところ、sessionid が見つかりました。
ipdb> self.request.COOKIES
{'csrftoken': '43535f552b7c94563ada784f4d469acf', 'sessionid': 'rii380947wteuevuus0i5nbvpc6qq7i1'}
SWFUploadMiddleware(Firefox使用時)に投稿されているものを見たところ、sessionidが設定されていないことがわかりました。
アップロード ハンドラを含むページを生成する最初のビューで、セッション ID をコンテキストに追加しました。
context['sessionid'] = self.request.session.session_key
swfuploader の設定で、次のように post-params オプションに sessionid を追加しました。
post_params: {... "sessionid": "{{ sessionid }}" ...},
ここで、SWFUploadMiddleware を調べたところ、セッション ID が投稿されていることがわかり、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']