2016-07-19 3 views
1

친구, 장고에서 아약스를 사용하여 양식 제출을 처리하려고합니다. 나는 말한다이 오류,django에서 아약스 게시물 요청 중 HttpResponse 오류

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

여기 내 change_profile.py이

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") 

을 그리고 어디에서 잘못 가고

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

을 다음과 같이 나의은 ajax.js 인을지고있어?

+0

난 당신이 원래'if' 문장의 순서를 변경할 필요가 있다고 생각합니다. 기술적으로 요청은 ajax이므로 첫 번째 if 문을 반환합니다. 두 번째 것은 실행하지 않습니다. 그것은 어쨌든 내 믿음입니다. 거기에'print' 문을 넣어 확인하십시오. – jape

+0

GET 요청에 대한 확인을 추가했지만 여전히 동일한 오류가 발생합니다. GET은 아약스로 잘하고 있지만 POST에는이 문제가 있습니다 – amankarn

+0

어떤 장고 버전을 사용하고 있습니까? – jape

답변

0

제거 당신은 기술적으로 귀하의 Ajax 요청도 POST의 수 또는 유형을 얻을 것이다, 필요하지 않은이

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

. 그래서 당신이 필요로하는 모든입니다 :이 일을

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

나는 당신이 당신의 답을 봐야한다고 생각한다. 파이썬 컨트롤 문에 중괄호가 있다고 생각합니까? – amankarn

+0

제 잘못, 자바 스크립트 코드를보고 파이썬 코드로 읽었습니다. 사과에 대해 사과드립니다. 솔루션이 효과가 있습니까? –

+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