2017-09-08 1 views
0

django-allauth를 사용하면 AJAX 로그인을 통해 양식 오류를 어떻게 얻을 수 있습니까?Django-allauth - Ajax에서 양식 오류를 얻으려면 어떻게해야합니까?

/signup/ URL과 함께이보기를 사용하고 있습니다 : 양식에 문제가있는 경우

var signupForm = function(token) { 
    $.ajax({ url:"/signup/", 
      type:"POST", 
      data: { 
       "email": $('#user').val(), 
       "password1": $('#pass1').val(), 
       "password2": $('#pass2').val() 
      }, 
      success: function(){ 
       location.href = '/'; 
       window.location.reload(true); 
      }, 
      error:function (er) { 
       alert("signup failure...",er); 
      } 
     }); 
}; 

불편, 그것은 반환 편리

from allauth.account.views import SignupView 

, 내 Ajax 호출을 허용합니다

오류 400 : 잘못된 요청

로그인이 실패한 이유는 알 수 없습니다. 내가 무슨 일이 있었는지 사용자에게 전할 수 있기를 바랍니다. 비밀번호가 잘못 되었습니까? 이메일 주소가 이미 등록 되었습니까?

all-auth를 사용하여이를 수행 할 수 있습니까? 아니면 javascript에서 자체 유효성 검사를 작성해야합니까?

답변

0

시도 코드로 대신 URL에 아래 url:"/signup/"

url:"/accounts/signup/" 
+0

내 URL을 다시 봤는데, 문제가 내가 성공적으로 가입 할 수있는 뷰에 도달을 가지고 있지 않다. 가입이 실패하면 오류를 검색 할 수있는 방법을 찾고 있습니다. –

+0

Django-allauth는 기본적으로 로그인 또는 등록 중에 발생한 오류를 표시합니다. –

+0

맞아, 프론트 엔드로 전달하기 위해서'post()'메소드를 덮어 써야했다. 내 솔루션을 게시했습니다. –

0

문제를 사용하여 그것이 csrfmiddlewaretoken이 누락되어 있다는 점이다. 당신은 ({% csrf_token %} 태그와) 양식에 포함하고이처럼 AJAX 요청에 추가해야합니다

$.ajax({ url:"/signup/", 
     type:"POST", 
     data: { 
      "email": $('#user').val(), 
      "password1": $('#pass1').val(), 
      "password2": $('#pass2').val(), 
      "csrfmiddlewaretoken": $('<selector for the csrf token input>').val() 
     }, 
     ... 

이 항목 장고의 모든 POST 요청이 필요합니다.

+0

CSRF 쿠키를 전달하는 또 다른 방법이 있지만 조심해 감사드립니다! –

2

나는 지원 솔루션을 찾을 수 없습니다, 그래서 그것을 해킹 :

from django.http import JsonResponse 
from allauth.account.views import SignupView, _ajax_response 

class AjaxSignUpView(SignupView): 
    def post(self, request, *args, **kwargs): 
     form_class = self.get_form_class() 
     form = self.get_form(form_class) 
     if form.is_valid(): 
      response = self.form_valid(form) 
      return _ajax_response(
       self.request, response, form=form, data=self._get_ajax_data_if()) 
     else: 
      return JsonResponse({'errors': form.errors}) 
+0

제발, 방금 모텔 (부트 스트랩) 아약스를 통해 로그인 및 등록을 관리하고 일부 컨텍스트 변수를 제어 할 수 있다는 것을 제외하고는 올바른 것으로 보이는 게시물을 찾았습니다. 귀하의 대답은 나에게 적합하지만 불완전한 것이며 무엇보다도 로그인보기에서 어떻게 할 수 있는지에 대해서는 말하지 않습니다. 내게 더 완벽한 답변을 등록 및 로그인 아약스를 통해 게시 할 수 있습니까 (장고 allauth 물론)? 제발 ... – rakwen

+0

어떤 다른 정보를 원하십니까? 'LoginView'와 똑같은 코드를 사용할 수 있습니다. 그러면 json 객체에서 Ajax 루틴으로 오류가 다시 전송됩니다. –

관련 문제