6

モデルの特定のフィールドを更新するために、次のajax呼び出しがあります

$("#updateLink").click(function(){
    var dec_text = $('#desc_text').val();

    $.ajax({
        type: "POST",
        url:"/users/update_desc/",
        data: {
        'val': dec_text,
        },
        success: function(){
            $(".display, .edit").toggle();
            $("#descText").html(dec_text);
        },
        error: function(){
            alert("Error");
        },
    });
    return false;
});

私の見解はこれです

@csrf_exempt
def update_desc(request):
    if request.is_ajax():
        if request.method == 'POST':
            desc_text = request.POST.get('val', False)
            if desc_text:
                profile = user.profile
                profile.desc = desc_text
                profile.save()

            return_message = "Sent mail"
            return HttpResponse(return_message,mimetype='application/javascript')

常にエラーメッセージが表示されますが、これを解決する方法がわかりません。csrf_exempt問題の原因が欠落している場合でも、デコレータを使用して回避策を講じましたcsrf tokenが、それでも問題は解決しません。

ajax post私のbaseテンプレートですべてのajax呼び出しが失敗しているものを除いて。誰かがここで何が起こっているのかを理解するのを手伝ってくれませんか。必要に応じて、もう少し詳しく説明します。

編集:

このhttps://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajaxjsを含むファイルをベーステンプレートに追加したので、すべてのテンプレートに存在することを意味します。そして、私はdjango1.3バージョンを使用しています。

4

1 に答える 1

6

まず、POSTを使用しており、csrfトークンを送信していません。デコレータcsrf_exemptを使用するのではなく、csrfトークンを明示的に送信してみてください。
これを行う1つの方法は、データで行ったことを使用することです。これは、csrfトークンを(または独自のメソッドから)フェッチして、引数に渡すことです。

$.ajax({
        url : url,
        type: "POST",
        data : {csrfmiddlewaretoken: document.getElementsByName('csrfmiddlewaretoken')[0].value},
        dataType : "json",
        success: function( data ){
            // do something
        }
    });
于 2011-12-30T07:51:14.470 に答える