Sto tentando di inviare un modulo di accesso usando ajax. Sono confuso su come dovrei gestire le eccezioni/le risposte positive. Ricevo un 200 OK dal server e il modulo restituisce l'errore sia dal campo password/nome utente. Come posso ottenere un messaggio di errore per visualizzare o reindirizzare l'utente alla pagina appropriata in base alla risposta del server?Modulo di login di Django Ajax
JQuery:
56 $(window).load(function(){
57 $('#login_form').submit(function(e){
58 e.preventDefault();
59 var request_url = document.getElementById('next').value
60 $.ajax({
61 type:"POST",
62 url: $(this).attr('action'),
63 data: $('#login_form').serialize(),
64 success: function(response){ $('#msg').text(response);
65 console.log(response);
66 },
67 error: function(xhr, ajaxOptions, thrownError){ alert($('#login_error').text('Username already taken. Please select another one.')},
68 });
69 });
70 });
VISTA: AGGIORNATO
51 def login(request):
52 if request.method == 'POST':
53 request.session.set_test_cookie()
54 login_form = AuthenticationForm(request, request.POST)
55 if login_form.is_valid():
56 if request.is_ajax:
57 user = django_login(request, login_form.get_user())
58 if user is not None:
59 return HttpResponseRedirect(request.REQUEST.get('next', '/'))
**else:**
61 **return HttpResponseForbidden() # catch invalid ajax and all non ajax**
60 else:
61 login_form = AuthenticationForm(request)
62
63 c = Context({
64 'next': request.REQUEST.get('next'),
65 'login_form': login_form,
66 'request':request,
67 })
68 return render_to_response('login.html', c, context_instance=RequestContext(request))
MODULO:
7 <tt id="login_error"></tt>
8 <form id="login_form" action="" method="post">
9
10 {{ login_form }}
11 <input type="submit" value="login"/>
12 <input type="hidden" id="request_path" name="next" value="/"/>
13 </form>
14 <p>{{ request.get_full_path }}</p>
15 <tt id='msg'></tt>
Vale la pena notare che dovrai assicurarti di essere gestito il token csrf correttamente o avrai problemi con i moduli ajax - https://docs.djangoproject.com/en/1.4/ref/contrib/csrf/#ajax –
Grazie Aidan! Ha funzionato. Ora l'unica cosa che devo capire è come analizzare il valore "successivo" dalla risposta in modo da poter reindirizzare correttamente la pagina. :) – user1462141
Non dovrebbe essere necessario l'analisi, mi aspetterei che sia una stringa (non so senza vedere come è stata impostata).La mia ipotesi è che non ci sia un attributo "next" nei dati POST o GET, quindi viene utilizzato il valore predefinito "/". Dovrai scoprire come viene impostato. Controlla qui i documenti per maggiori informazioni sulla richiesta.Registro DOMANDA - https://docs.djangoproject.com/en/1.4/ref/request-response/#django.http.HttpRequest.REQUEST –