Django - Ajax modal логин/регистрация
У меня есть проект, в котором мне нужно поместить модальное окно для не прошедших проверку подлинности пользователей.
Этот модальный способ позволяет напрямую войти в систему или.
Таким образом, он будет содержать две формы:
-
django.contrib.auth.forms.AuthenticationForm
-
registration.forms.RegistrationForm
![Modal tabbed forms]()
Вот мой взгляд на получение обеих форм:
def ajax_registration(request):
obj = {
'login_form': AuthenticationForm(),
'registration_form': RegistrationForm(),
}
return render(request, 'common/ajax_registration.html', obj)
И мой шаблон, отображающий формы с вкладками
<ul class="nav nav-tabs">
<li><a href="#tab1" data-toggle="tab">{% trans 'Login' %}</a></li>
<li><a href="#tab2" data-toggle="tab">{% trans 'Registration' %}</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="tab1">
{{ login_form|bootstrap }}
</div>
<div class="tab-pane" id="tab2">
{{ registration_form|bootstrap }}
</div>
</div>
Вопрос: Поскольку я использую ajax для отображения этого модального метода, как я могу проверить выбранную форму, предпочтительно используя уже написанную django-registrations register
и django.contrib.auth login
просмотры?
Ответы
Ответ 1
В дополнение к Maddog ответьте, вам нужен javascript, чтобы отправить форму обратно к URL-адресу, который отобразил форму. Используя jquery, это может быть что-то вроде:
$('form').submit(function(e){
e.preventDefault();
var form = $(e.target);
$.ajax({
url: '{% url YOUR_REGISTRATION_URL %}',
type: 'post',
data: account_form.serialize() + '&' + form.serialize(),
error: function(xhr, ajaxOptions, thrownError){ alert(thrownError); },
success: function(){}
})
})
Вам не нужно делать это с помощью элемента представления формы, вы можете использовать любой элемент с $(). click(), конечно.
Ответ 2
Что-то вроде этого?
def ajax_registration(request):
login_form, registration_form = False, False
if request.method == "POST":
if "email" in request.POST: # some condition to distinguish between login and registration form
login_form = AuthenticationForm(request.POST)
if login_form.is_valid():
# log in
else:
registration_form = RegistrationForm(request.POST)
if registration_form.is_valid():
# register
obj = {
'login_form': login_form if login_form else AuthenticationForm(),
'registration_form': registration_form if registration_form else RegistrationForm(),
}
return render(request, 'common/ajax_registration.html', obj)