Django - Ajax模式登录/注册

Pie*_*NAY 11 django ajax django-templates django-registration twitter-bootstrap

我有一个项目,我需要为未经过身份验证的用户弹出模式窗口.

此模式将允许直接登录创建帐户.

所以它将包含两种形式:

  • django.contrib.auth.forms.AuthenticationForm
  • registration.forms.RegistrationForm

模态选项卡表单

这是我的观点,以获得两种形式:

def ajax_registration(request):
    obj = {
        'login_form': AuthenticationForm(),
        'registration_form': RegistrationForm(),
    }
    return render(request, 'common/ajax_registration.html', obj)
Run Code Online (Sandbox Code Playgroud)

我的模板显示表格标签

<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>
Run Code Online (Sandbox Code Playgroud)

问题是:由于我使用AJAX来显示这个模式,我怎样才能确认所选的形式,最好使用已经书面django-registrations registerdjango.contrib.auth login看法?

Den*_*1.5 6

除了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(){}
        })
 })
Run Code Online (Sandbox Code Playgroud)

你不需要使用表单提交元素,你可以使用$().click()的任何元素.

  • 您可以使用AJAX调用(jquery中的$ .load())加载它们.如果您创建了两个相应视图的URL,则可以在登录选项卡中加载一个,在注册选项卡中加载一个.您可能需要覆盖formname,因为它们可能都使用form作为名称. (2认同)