13

認証されていないユーザーのモーダル ウィンドウをポップする必要があるプロジェクトがあります。

このモーダルにより、直接ログインする、アカウントを作成できます。

したがって、次の 2 つの形式が含まれます。

  • 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)

そして、タブ付きのフォームを表示する私のテンプレート

<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ビューを使用して、選択したフォームを検証するにはどうすればよいですか?

4

2 に答える 2

7

Maddog の回答に加えて、フォームをレンダリングした URL にフォームを送信するための JavaScript が必要です。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() で任意の要素を使用できます。

于 2012-11-15T09:18:51.557 に答える
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)
于 2012-11-15T09:07:29.097 に答える