2016-07-19 6 views
1

друзья, я пытаюсь справиться формы представления с использованием Ajax в Джанго. Я получаю эту ошибку, которая говорит,HttpResponse ошибка во время запроса Ajax пост в Джанго

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

и мой ajax.js выглядит следующим образом

$(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. Он не будет выполнять второй. Это мое мнение. Попробуйте поставить там '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 или GET типа. Так все, что вам нужно:

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

Сообщение Django 1.7, используя JsonResponse рекомендуемый формат. Pre 1.7 был методом, который вы изначально использовали.

Сообщите мне, если это работает.

Edit (попытка 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