10

मेरे पास एक प्रोजेक्ट है जिसमें मुझे प्रमाणीकृत उपयोगकर्ताओं के लिए एक मोडल विंडो पॉप करने की आवश्यकता नहीं है।Django - अजाक्स मोडल लॉगिन/पंजीकरण

यह मॉडल सीधे या लॉगिन करने की अनुमति देगा।

तो यह दो रूपों में शामिल होंगे:

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

क्या आपने इसे सफलतापूर्वक कार्यान्वित किया है? क्या आप जिथब पर कोड के इस टुकड़े को कहीं भी साझा कर सकते हैं? यह अच्छा बिंदु culminant होगा :-) – andi

+2

अच्छा विचार। मुझे AJAX पंजीकरण के साथ कुछ समस्याएं हैं। मैं अपनी फाइलों को जिथब पर धक्का दे रहा हूं (मुझे नहीं पता कि उन्हें कैसे पैकेज किया जाए) –

+1

[यहां] (https://github.com/Glideh/django-ajax-login) आप जाते हैं। किसी भी सुधार की सराहना की है। –

उत्तर

5

Maddog के जवाब के अलावा आप कुछ जावास्क्रिप्ट की जरूरत प्रपत्र यूआरएल उस रूप में प्रदान की गई करने के लिए वापस प्रस्तुत करने के लिए।

$('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

धन्यवाद। असल में मुझे पता है कि जावास्क्रिप्ट भाग का प्रबंधन कैसे करें। मैंने केवल संदर्भ निर्दिष्ट करने के लिए AJAX का उल्लेख किया है जिसमें अंत में कुछ जेसन या HTML प्रतिक्रियाएं शामिल होंगी। –

+0

मैं विशेष रूप से खोज कर रहा हूं कि ['django-registrations register'] (http://docs.b-list.org/django-registration/0.8/views.html#registration.views.register का उपयोग करके दोनों रूपों को कैसे संसाधित करना है।) और ['django.contrib.auth लॉगिन'] (https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.views.login) विचार –

+1

ठीक है, मैं देखता हूं। तो आपको उनके पंजीकरण की आवश्यकता है .views.register अगर यह एक नया उपयोगकर्ता है और django.contrib.auth.views.login अगर यह पहले से ही बनाया गया पंजीकरण है?क्या आप फॉर्मों का उपयोग करने के बजाय सीधे उन दो विचारों का उपयोग नहीं करना चाहिए? –

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 - यदि उपयोगकर्ता ईमेल भरता है तो अंत में सीधे लॉगिन करना चाहता है, तो यह टूट जाएगा (इसलिए इसे चयनित टैब लेना होगा, मैं इसके लिए एक छिपी हुई इनपुट अपडेट करने वाला जेएस करूंगा)। 2 - क्या पहले से लागू मैकेनिक्स का लाभ उठाने के लिए मौजूदा पंजीकरण विचारों का मार्ग बनाने का कोई तरीका है? –

+0

1. - "ईमेल" द्वारा सुनिश्चित करें .. 'मेरा मतलब सिर्फ उन 2 रूपों के बीच अंतर करने के लिए कुछ शर्त है 2. - आपके मन में क्या विचार है? मैंने सोचा था कि आप कुछ एथ एपीआई का उपयोग करके पृष्ठभूमि पर पंजीकरण/लॉगिन करना चाहते हैं ... अच्छी तरह से मैं इस ऐप को बहुत अच्छी तरह से नहीं जानता, इसलिए मैं आपको इस – Maddog

+0

से कुछ नहीं रोक सकता AJAX के माध्यम से django- पंजीकरण फॉर्म जमा करके समान है, लेकिन मुझे 403 मिल रहा है। क्या किसी ने फॉर्म को संसाधित करने में सफलता प्राप्त की है? – lorenag83

संबंधित मुद्दे