2016-07-19 11 views
1

友達、djangoでajaxを使用してフォーム提出を処理しようとしています。私はここに私のchange_profile.pyはdjangoでのajax投稿要求中のHttpResponseエラー

def change_username(request): 
    if request.is_ajax() and request.method == 'GET': 
     return render(request,"auths/edits/edit_username.html",{}) 
    elif request.method == 'POST' and request.is_ajax(): 
     username = request.POST['username'] 
     user = User.objects.get(username=request.user.username) 
     user.username = username 
     user.save() 
     if user.save(): 
      data = "Username successfully updated" 
     else: 
      data = "Something went wrong!" 
     return HttpResponse(json.dumps({'data':data}), content_type="application/json") 

と私のajax.jsだ、と言うその

The view auths.change_profile.change_username didn't return an HttpResponse object. It returned None instead. 

をこのエラーを取得してきた私が間違っているつもりです

$(document).ready(
    $('#username_form').submit(function(){ 
    $.ajax({ 
     type:"POST", 
     url:'/change_username/', 
     data:{ 
       'csrfmiddlewaretoken':$('input[name=csrfmiddlewaretoken]').val() 
     }, 
     success:function(data){ 
      $('#username').html(data); 
     } 
    }); 
}); 
); 

は次のようにありますか?

+0

私はあなたがあなたの元 'if'文の順序を変更する必要があると思います。技術的にはリクエストはajaxなので、最初のif文を返すでしょう。 2つ目は実行しません。とにかくそれは私の信念です。そこに 'print'文を入れてチェックしてみてください。 – jape

+0

GETリクエストのチェックを追加しましたが、同じエラーが表示されています。 GETはAjaxでうまくいっていますが、POSTにこの問題があります – amankarn

+0

あなたはどのバージョンのDjangoを使用していますか? – jape

答えて

0

この

if request.is_ajax(): 
    return render(request,"auths/edits/edit_username.html",{}) 

を外し技術的にあなたのAjaxリクエストもPOSTであるかの種類を取得するようあなたは、それを必要としません。 だから、あなたが必要なのは次のとおりです。

if request.method == 'POST': 
    username = request.POST['username'] 
    user = User.objects.get(username=request.user.username) 
    user.username = username 
    user.save() 
    if user.save(): 
     data = "Username successfully updated" 
    else: 
     data = "Something went wrong!" 
    return HttpResponse(json.dumps({'data':data})) 
else: 
    json.dumps({"nothing to see": "this isn't happening"}) 
+0

私はあなたの答えを見てみる必要があると思う。 Pythonの制御文に中括弧があると思いますか? – amankarn

+0

私の悪い、私はjavascriptのコードを見て、あなたのpythonコードとして読んでください。 エラーのお詫び。 ソリューションはあなたのために機能しましたか? –

+0

いいえ、動作しませんでした。 – amankarn

0

はこれをやってみてください。

from django.http import JsonResponse 

def change_username(request): 
    if request.is_ajax() and request.method == 'GET': 
     return render(request, "auths/edits/edit_username.html", {}) 
    elif request.is_ajax() and request.method == 'POST': 
     username = request.POST['username'] 
     user = User.objects.get(username=request.user.username) 
     user.username = username 
     user.save() 
     if user.save(): 
      data = "Username successfully updated" 
     else: 
      data = "Something went wrong!" 
     return JsonResponse({'data': data}) 

ポストジャンゴ1.7、JsonResponseが推奨される形式で使用します。プレ1.7は当初使用していた方法でした。

それが動作するかどうかを教えてください。

編集(試行2):

from django.http import JsonResponse 
from django.shortcuts import get_object_or_404 
from django.views.decorators.http import require_http_methods 


@require_http_methods(['POST']) 
def change_username(request): 
    if not request.is_ajax(): 
     return render(request, "auths/edits/edit_username.html", {}) 
    else: 
     new_username = request.POST.get('username') 
     user = get_object_or_404(User, id=request.user.id) 
     initial_username = user.username 
     user.username = new_username 
     user.save() 

     data = {} 

     if user.username == new_username: 
      data['data'] = "Username successfully updated!" 
     else: 
      data['data'] = "Something went wrong!" 

     return JsonResponse(data) 
+0

それもうまくいかなかった。同じエラーが表示されます。 – amankarn

+0

@amankarn新しいコードが動作するかどうかを確認してください。そうでない場合は、間違いなくそのビューです – jape

関連する問題