10

私は認証されていないユーザーのためにモーダルウィンドウをポップする必要があるプロジェクトがあります。Django - Ajaxモーダルログイン/登録

このモードでは、直接ログインすることができますまたはアカウントを作成します。

だから、それは二つの形式が含まれます:

def ajax_registration(request): 
    obj = { 
     'login_form': AuthenticationForm(), 
     'registration_form': RegistrationForm(), 
    } 
    return render(request, 'common/ajax_registration.html', obj) 
:ここ

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

Modal tabbed forms

は、私の見解では、フォームの両方を取得することです

とフォームを表示する私のテンプレートが

<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

あなたはそれを正常に実装していますか?あなたはgithubでsomwhereのコードのこの部分を共有できますか?それは良い点を究明します:-) – andi

+2

良いアイデア。私はちょうどajax登録にいくつかの問題があります。私はgithub上で私のファイルをプッシュするつもりです(私はそれらをパッケージ化する方法を知らない) –

+1

[ここ](https://github.com/Glideh/django-ajax-login)行く。どんな改善も大歓迎です。 –

答えて

5

Maddogの回答に加えて、フォームをレンダリングしたURLにフォームを送信するためのjavascriptが必要です。 。あなたは要素を提出フォームでそれを行う必要はありません

$('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(){} 
     }) 
}) 

、あなたは$()で任意の要素を使用することができ、もちろん、)(クリック:jqueryのを使用すると、それはのようなものがある可能性があります。

+1

ありがとうございます。実際に私はJavascriptの部分を管理する方法を知っています。私は最終的にいくつかのjsonまたはhtml応答を含む文脈を指定するためにajaxについて述べました。 –

+0

私は['django-registrations register'](http://docs.b-list.org/django-registration/0.8/views.html#registration.views.register)を使用して、両方のフォームを処理する方法をより具体的に探しています。 )&['django.contrib.auth login'](https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.views.login)ビュー –

+1

が表示されます。したがって、新しいユーザーであればregistration.views.registerが必要です。すでに登録されている場合にはdjango.contrib.auth.views.loginが必要です。フォームを使用する代わりに、それらの2つのビューを直接使用するべきではありませんか? –

1

これは何か?

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) 
+0

ありがとうございます。ここでは2つの問題があります:1 - ユーザーが電子メールをいっぱいにした後、最終的に直接ログインしたい場合、それは中断されます(選択されたタブを取る必要があるので、JSはそのために隠された入力を更新します)。 2 - すでに実装されているメカニックを利用するために、既存の登録ビューにルーティングする方法はありますか? –

+0

1. - "私はちょうどそれらの2つのフォーム2を区別するための条件を意味した。私はちょうどいくつかの認証APIを使用してバックグラウンドで登録/ログインを実行したいと思っていた...よく私はこのアプリをあまりよく知らないので、私はこれであなたをハーフアップすることはできません – Maddog

+0

私は何かをしようとしていますdjango登録フォームをajax経由で提出しても同様ですが、私は403を取得しています。誰かがフォームの処理を手伝ったのですか? – lorenag83