11

Używam django-allauth dla jednego z moich projektów. Chciałbym zaimplementować proces logowania/rejestracji przez ajax. Chciałbym mieć dostosowany formularz rejestracji. Przechodziłem przez ich formularz rejestracji i rejestracji. Wygląda na to, że mogę napisać niestandardowe widoki dla każdej akcji i zmapować ją do konfiguracji adresu URL. Nie jestem pewien, jaki jest najlepszy sposób na zrobienie tego.Implementacja żądań/odpowiedzi Ajax przy użyciu django-allauth

Dziękuję bardzo za pomoc lub porady w tej sprawie.

Odpowiedz

9

To zależy trochę od tego, co masz na myśli przez ajax. Jeśli chcesz mieć wyskakujące okienko logowania/rejestracji na każdej stronie, możesz po prostu dodać formularz do swojego bazowego szablonu i pokazać go dynamicznie za pomocą JavaScript w wyskakującym okienku. Jeśli zachowasz adres URL formularza do oryginalnych adresów URL: allauth, będzie to już dawać znak ajax. Możesz również poprawić ustawienia, używając $.ajax lub $.post, aby publikować w oryginalnych widokach allauth.

Coś jak wyżej zostało zrobione na http://officecheese.com/ - jest to witryna oparta na allauth, ale nie jestem z nią powiązana.

Jeśli przez ajax masz na myśli to, że wszystkie widoki związane z uwierzytelnianiem powinny być wyświetlane przez ajax, bez powodowania ponownego ładowania nowego dokumentu, obawiam się, że masz trochę szczęścia. Jest to po prostu problematyczne w przypadku scenariuszy, w których weryfikuje się pocztę e-mail lub uściski dłoni OAuth, ponieważ zazwyczaj korzystasz z adresu URL ze swojej skrzynki pocztowej lub przekierowujesz na Twittera i tak dalej.

+1

Witam @pennersr, wspaniale, aby otrzymać odpowiedź. Chciałbym zaimplementować formularz w menu rozwijanym, podobnym do tego, co robi serwis officecheese.com. ale jeśli wystąpi błąd, powiedzmy "nieprawidłowa nazwa użytkownika lub hasło" lub "Nazwa użytkownika już istnieje". Chciałbym dostać ten błąd tuż przed faktycznym nawigowaniem. Więc, jaki jest mój plan, prześlij formularz za pomocą '$ .post' i uzyskaj odpowiedź jsona na logowanie i rejestrację. Dziękuję bardzo za pomoc w tym. – san

+1

Możesz sprawdzić odpowiedź na swoje wezwanie '$ .post/ajax', wyodrębnić formularz html (zawierający błędy sprawdzania poprawności) i zastąpić oryginalny formularz. Coś jak: '$ (" ... oldForm ... "). ReplaceWith ($ (ajaxresponse) .find (" formularz "))'. Wykrywanie przekierowania adresu URL powodzenia logowania może być nieco kłopotliwe, musisz wykryć, że kończysz na adresie URL przekierowania logowania. Przesłanianie widoków w celu zwrócenia uporządkowanych danych JSON jest jednak bardziej przejrzyste. Z drugiej strony, dlaczego tak się dzieje, próbując to zinterpretować - witryny takie jak Twitter też tego nie robią. – pennersr

+0

@ pennersr oprócz hardcoding id do szablonów bazowych lub przy użyciu widoków opartych na klasach, czy istnieje sposób na uwzględnienie formularza we wszystkich moich widokach opartych na funkcjach bez konieczności dodawania go do każdego widoku? – wasabigeek

Powiązane problemy