10

ben değil doğrulanmış kullanıcılar için kalıcı bir pencere pop gereken bir proje var.Django - Ajax modal giriş/kayıt

Bu kalıcı doğrudan veya bir hesap oluşturmak giriş sağlayacaktır. İki formları içerecektir Yani

:

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

Modal tabbed forms

  • django.contrib.auth.forms.AuthenticationForm
  • registration.forms.RegistrationForm
hem formlarını almak için benim görünümdür

Ve formlarını gösteren benim şablon

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

Soru edilir sekmeli: Bu kalıcı görüntülemek için ajax kullanıyorum beri nasıl tercihen zaten yazılı django-registrations register & django.contrib.auth login görünümleri kullanarak, seçilen formu doğrulayabilir?

+1

sen başarıyla uygulamak var? Bu kod parçasını github'da bir yerde paylaşır mısınız? Güzel bir nokta olacak culminant :-) – andi

+2

İyi fikir. Ajax kaydıyla ilgili bazı sorunum var. Github üzerinde dosyalarımı itmek için gidiyorum [İşte] –

+1

(Gerçi onları paketlemek için nasıl bilmiyorum) (https://github.com/Glideh/django-ajax-login) gitmek. Herhangi bir iyileştirme çok takdir edilmektedir. –

cevap

5

MadDog cevabı yanı sıra formu render URL'ye geri formu göndermek için bazı JavaScript. . Sen eleman göndermek bir form ile yapmak gerekmez

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

, size $() ile herhangi bir unsuru kullanabilirdi elbette) (tıklayın: jquery kullanarak, böyle bir şey olabilir.

+1

Teşekkür ederiz. Aslında Javascript bölümünü nasıl yöneteceğimi biliyorum. Ajax'tan bahsettiğim, nj ya da html yanıtlarını içerecek olan bağlamı belirtmek için. –

+0

Her iki formun nasıl işleneceğini daha ayrıntılı olarak araştırıyorum: ['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) görüntülenme sayısı –

+1

tamam, görüyorum. Yeni bir kullanıcı ve zaten oluşturulmuş bir kayıt ise django.contrib.auth.views.login ise onların registration.views.register gerekir?Formları kullanmak yerine bu iki görünümü doğrudan kullanmamalısınız? –

1

böyle bir şey?

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

Cevabınız için teşekkür ederiz. Burada 2 sorunları: 1 - Kullanıcı nihayet böyle bir email doldurur doğrudan giriş istiyorsa kırarım (yani bunun için gizli bir girişi güncelleyerek bir JS yapacak, seçilen sekmeyi almak zorunda). 2 - Halihazırda uygulanan mekaniğin avantajlarından faydalanmak için mevcut kayıt görünümlerine yönlendirmenin herhangi bir yolu var mı? –

+0

1. - '' e-posta '' ile eminim .. 'Sadece 2 formunu birbirinden ayırmak için bazı şartlar kastediyorum 2. - aklınızda ne var? Sadece bazı auth API'larını kullanarak arka planda kayıt/giriş yapmak istediğinizi düşündüm ... ben de bu uygulamayı çok iyi bilmiyorum, bu yüzden bu kadar çok şeyle durduramıyorum – Maddog

+0

Bir şeyler yapmaya çalışıyorum ajax yoluyla django-kayıt formları sunarak benzer, ama ben 403 alıyorum. Formları işleyen biri var mı? – lorenag83