3

このチュートリアルに従って Uploadify を使用して Django にファイルをアップロードしようとしています。すべての手順を適切に実行しました。それに加えて、アップロードされているファイルに関する情報を保存するモデルを作成しました。

私のテンプレートにはこれが含まれています

<script type="text/javascript" src="{{ STATIC_URL }}uploadify/swfobject.js"></script>
<script type="text/javascript" src="{{ STATIC_URL }}uploadify/jquery.uploadify.v2.1.4.js"></script>
<script type="text/javascript">
    $(document).ready(function() {
        $('#file_upload').uploadify({
            'uploader'  : '{{ STATIC_URL }}uploadify/uploadify.swf',
            'script'    : '{% url upload_file %}',
            'cancelImg' : '{{ STATIC_URL }}uploadify/cancel.png',
            'auto'      : true,
            'multi'     : true,
            'fileExt'   : '*.doc;*.docx;*.pdf',
            'fileDesc'  : 'Upload Docs',
            'queueID'   : 'file_upload_queue',
            'removeCompleted': false,
        });
    });
</script>

<h2 id="smallHeading"> Upload your Documents </h2>
<input id="file_upload" type="file" name="Filedata" />
<a href="javascript:$('#file_upload').uploadifyUpload();">Upload Files</a>

私のurl.pyファイルにはこの行が含まれています

  url(r'^upload/$', 'userprofile.views.upload_file', name='upload_file'), 

そしてビューは

@csrf_exempt
def upload_file(request):
    if request.method == "POST":
        upload_file = request.FILES['Filedata']
        upload_instance = Uploads.objects.create(creator = request.user, uploaded_on = datetime.datetime.now())
    upload_instance.file.save(upload_file.name,upload_file)
    upload_instance.save()

    response = HttpResponse()
    response.write("%s\r\n" % upload.name)
    return response

そして私のmodels.py含む

def get_file_path(instance, filename):
    return os.path.join('userprofiles', str(instance.creator.id), filename)

class Uploads(models.Model):
    file = models.FileField(upload_to=get_file_path)
    creator = models.ForeignKey(User)
    uploaded_on = models.DateTimeField()

しかし、ここでは何も起こっていません。私が得るのはアップロードボタンだけです。ファイルを選択しますが、何も起こりません。何が起こっているのかを知るのを手伝ってくれる人はいますか? script解雇されていないようです。以前はビューにエラーがありましたが、エラーは発生しなかったため、これを知っています。

どんな助けでも大歓迎です。

編集:

firebugコンソールには何も表示されず、パネルにもリクエストnetは表示されませんが、ファイルアップロードの POST リクエストと応答が表示されます。私はなぜそれが必要なのですか?POSTdjango debugger403csrf_exemptforbidden

解決策:私はついに問題を解決しました。403 エラーについては、このリンクから興味深いことがわかりました。ビューにデコレータcsrf_exemptがあり、そのビューに 404 エラーがある場合、django は 403 エラーを表示します。

実際の問題は、最初にリンクが間違っていたため、修正すると 403 エラーが発生しなくなりましたが、500 エラーが発生し始めました。これは、ビューに何か問題があることを意味していました。また、uploadufy は firebug に何も記録しないため、ビュー内の行をステップ実行してデバッグする必要がありました。

uploadifyスクリプトによって送信されたリクエスト オブジェクトが完了していないようでcreator = request.user、オブジェクトの作成中の行でエラーが発生していました。この行を除いて、上記のコードは完全に機能します。

4

1 に答える 1

1

これをさらにデバッグして、問題がクライアント側のJavaScriptにあるのか、サーバー側のDjangoコードにあるのかを確認することをお勧めします。

Firefox用のFirebugプラグインをダウンロードします。ページを読み込みます。Firebugを開き、[ネット]タブに移動します。すべてのJavaScriptがロードされていることを確認してください。次に、コンソールをチェックして、JavaScriptのバグが存在するかどうかを確認します。次に、Djangoログをチェックして、HTTPリクエストが通過しているかどうか、おそらくエラーが発生していないかどうかを確認します。

これは、問題の解決に役立つより多くの情報を取得するのに役立ちます。上記の手順で収集した追加情報を使用して、いつでも質問を更新できます。

于 2012-01-12T12:56:59.303 に答える