2016-02-08 3 views
0

Я пытаюсь отправить запрос на просмотр django, но он продолжает возвращаться INTERNAL SERVER ERROR 500.django POST return Internal Server 500 error

Мой Аякса пост:

$.ajax({ 
    url : "/loginAction/", 
    type : "POST", 
    async : false, 
    data : {action:'loginAction', 
      email:email, 
      password:password}, 

    success : function(response) { 
     $.niftyNoty({ 
      type:"success",icon:"",title:"Login Successful. Redirecting....",container:"floating",timer:5000 
     }); 
    }, 

    error : function(xhr,errmsg,err) { 
     console.log(xhr.status + ": " + xhr.responseText); 
     $.niftyNoty({ 
      type:"danger",icon:"",title:"Wrong Email OR Password",container:"floating",timer:5000 
     }); 
    } 
}); 

мой взгляд Джанго:

def loginAction(request): 
    print "Its workjing" 
    if request.method == 'POST' and 'loginButton' in request.POST: 
     email = request.POST.get('email') 
     password = request.POST.get('password') 

     print email, password 

     return HttpResponse(json.dumps({}),content_type="application/json") 

Мой urls.py

urlpatterns = [ 
      url(r'^', views.loginPage, name='loginPage'), 
      url(r'^loginAction/', views.loginAction, name='loginAction') 
     ] 

POST-Аякса не ударять вид Джанго. Это не печать Its working в консоли. Таким образом, он не возвращает ответ json на вызов ajax. Я также пробовал обычную форму POST, но тот же результат. Я использую django 1.9.2. Я не могу понять, почему эта ошибка?

возвращает этот код ошибки:

Internal Server Error: /loginAction/ 
Traceback (most recent call last): 
    File "/home/manish/Desktop/admin_picknbox/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 158, in get_response 
    % (callback.__module__, view_name)) 
ValueError: The view login_app.views.loginPage didn't return an HttpResponse object. It returned None instead. 

EDIT: Аякса Заголовок:

jQuery(document).ready(function($){ 
    $.ajaxSetup({ 
     beforeSend: function(xhr, settings) { 
      if (!csrfSafeMethod(settings.type) && !this.crossDomain) { 
       xhr.setRequestHeader("X-CSRFToken", csrftoken); 
      } 
     } 
    }); 
}); 

ответ

4

Кажется, что ваши URL-адреса являются проблемой, потому что в ошибке появляется то, что вызывается loginPage, хотя вы идете на /loginAction/. Поэтому постарайтесь, чтобы добавить $ в конце каждого регулярного выражения, как показано ниже:

urlpatterns = [ 
     url(r'^$', views.loginPage, name='loginPage'), 
     url(r'^loginAction/$', views.loginAction, name='loginAction') 
    ] 

Потому что кажется, что ваше первое регулярное выражение r'^' захватывает любой URL.

1

Ваша функция просмотра не заботиться обо всех случаях, в случае if request.method == 'POST' and 'loginButton' in request.POST: является False, вы просматриваете функция ничего не возвращает, следовательно, ошибка. Функция Python, если оставить без явного выражения return, вернет None.

Edit:

Если print оператор даже не выполняется, то вы должны иметь 403 ответа от Джанго. Вы должны передать токен csrf, когда вы делаете вызов ajax, чтобы предотвратить атаку неизвестного человека. Django будет проверять csrf автоматически, но вы должны передать его как часть данных:

data : {action:'loginAction', 
     email:email, 
     password:password, 
     csrfmiddlewaretoken: '{{ csrf_token }}'}, 

Кроме того, вы должны проверить "action" in request.POST не "loginAction" in request.POST.

+0

Хорошо, тогда он должен печатать 'Свою работу' в консоли, но это не печать. Он отлично работает в django 1.8.5, поэтому я не имею ничего общего с POST catch –

+0

Я отредактировал свой ответ. –

+0

Я уже прошел csrftoken в заголовке ajax, используя этот метод: См. Вопрос –

Смежные вопросы