2011-06-20 17 views
6

में विभिन्न रूपों का उपयोग कैसे करें Django- पंजीकरण form.py फ़ाइल में कई रूपों के वर्ग हैं। एक ..Django- पंजीकरण

मैं Django पंजीकरण कोड के बाकी हिस्सों में क्या बदल सकता हूँ RegistrationForm के बजाय प्रवाह मेरी पंजीकरण में इस प्रकार सक्षम करना आप एक नया पंजीकरण लिखने के लिए की आवश्यकता होगी वर्ग RegistrationFormTermsOfService (RegistrationForm) "क्या है?

उत्तर

5

आप बस अपनी urls.py में जाते हैं और ऐसा करके प्रपत्र वर्ग ओवरराइड कर सकते हैं कुछ ऐसा:

from registration.forms import RegistrationFormTermsOfService 

(r'^accounts/register/$', 'registration.views.register', {'form_class' : RegistrationFormTermsOfService}), 
+0

जो आश्चर्यजनक रूप से सरल लगता है ... और नया फॉर्म reg फ़ॉर्म के पुनः लोड पर दिखाना चाहिए? – Brenden

+0

आप इसे क्यों न दें :-) (संकेत: हाँ, यह चाहिए) –

+0

तो मैं इसे अपने मुख्य urls.py में और पंजीकरण लाइन से पहले डाल रहा हूं। लेकिन मुझे त्रुटि रजिस्टर मिल रहा है() कम से कम 2 गैर-कीवर्ड तर्क (1 दिया गया) – Brenden

1

अपने प्रोजेक्ट में कहीं भी फॉर्म बनाएं। यदि आप नए फ़ील्ड का विस्तार कर रहे हैं तो आप मौजूदा प्रमाणीकरण फॉर्म से वंचित हो सकते हैं। फिर आप फॉर्म को संसाधित करने के लिए एक नया बैकएंड लिखना चाहेंगे। अंत में आपको अपना यूआरएल लिखना होगा और auth_urls और दृश्यों को पारित करने वाले चर को बदलकर दृश्यों में बैकएंड और प्रमाणीकरण फ़ॉर्म को स्विच करने के लिए यूआरएल को फिर से परिभाषित करें।

ब्रेना के लिए यह सहायक है यह देखने के लिए स्रोत खोलें कि चीजें कैसे काम कर रही हैं। मैं चीजों को सुसंगत रखने के लिए मूल django- पंजीकरण कोड से अपनी संरचना का आधार बना देता हूं।

+0

यह फ़ॉर्म form.py फ़ाइल में पहले से मौजूद है। क्या मुझे अभी भी एक नया पंजीकरण फॉर्म लिखने की ज़रूरत है? मैं सचमुच मानक रेग क्लास के बजाय दूसरी कक्षा (प्रश्न में संदर्भित) का उपयोग करना चाहता हूं .. बस यह सुनिश्चित न करें कि वह एक सक्रिय रूप कैसे प्राप्त करें। – Brenden

5

यहां एक कस्टम प्रपत्र और बैकएंड का उपयोग करके एक व्यावहारिक उदाहरण है जो उपयोगकर्ता नाम == ईमेल पता सेट करता है, और केवल उपयोगकर्ता को पंजीकरण पर ईमेल पते के लिए संकेत देता है। में, उदाहरण के लिए my_registration.py:

from django.conf import settings 
from django.contrib.sites.models import RequestSite 
from django.contrib.sites.models import Site 

from registration import signals 
from registration.forms import RegistrationForm 
from registration.models import RegistrationProfile 
from registration.backends.default import DefaultBackend 

class EmailRegistrationForm(RegistrationForm): 
    def __init__(self, *args, **kwargs): 
     super(EmailRegistrationForm,self).__init__(*args, **kwargs) 
     del self.fields['username'] 

    def clean(self): 
     cleaned_data = super(EmailRegistrationForm,self).clean() 
     if 'email' in self.cleaned_data: 
      cleaned_data['username'] = self.cleaned_data['username'] = self.cleaned_data['email'] 
     return cleaned_data 


class EmailBackend(DefaultBackend): 
    def get_form_class(self, request): 
     return EmailRegistrationForm 

my_registration_urls.py में:

from django.conf.urls.defaults import * 
from django.views.generic.simple import direct_to_template 

from registration.views import activate 
from registration.views import register 

urlpatterns = patterns('', 
        url(r'^activate/complete/$', 
         direct_to_template, 
         { 'template': 'registration/activation_complete.html' }, 
         name='registration_activation_complete'), 
        # Activation keys get matched by \w+ instead of the more specific 
        # [a-fA-F0-9]{40} because a bad activation key should still get to the view; 
        # that way it can return a sensible "invalid key" message instead of a 
        # confusing 404. 
        url(r'^activate/(?P<activation_key>\w+)/$', 
         activate, 
         { 'backend': 'my_registration.EmailBackend' }, 
         name='registration_activate'), 
        url(r'^register/$', 
         register, 
         { 'backend': 'my_registration.EmailBackend' }, 
         name='registration_register'), 
        url(r'^register/complete/$', 
         direct_to_template, 
         { 'template': 'registration/registration_complete.html' }, 
         name='registration_complete'), 
        url(r'^register/closed/$', 
         direct_to_template, 
         { 'template': 'registration/registration_closed.html' }, 
         name='registration_disallowed'), 
        (r'', include('registration.auth_urls')), 
        ) 

फिर अपने मूल urls.py में, यह सुनिश्चित करने में शामिल हैं:

url(r'^accounts/', include('my_registration_urls')), 
+0

my_registration_urls.py में 'बैकएंड' सेटिंग्स नोट करें ... – Darb

13

स्वीकार किए जाते हैं जवाब अपडेट कर रहा है Django 1.5 और Django पंजीकरण के नवीनतम संस्करण के अनुरूप:

urls.py में

:

from registration.forms import RegistrationFormTermsOfService 
from registration.backends.default.views import RegistrationView 

urlpatterns = patterns('', 
    url(r'^accounts/register/$', RegistrationView.as_view(form_class=RegistrationFormTermsOfService), name='registration_register'), 
    # your other URLconf stuff follows ... 
) 

तो registration_form.html टेम्पलेट को अद्यतन करने और एक tos फ़ील्ड जोड़ें , उदाहरण:

<p> 
<label for="id_tos">I accept the terms of service</label> 
{% if form.tos.errors %} 
    <p class="errors">{{ form.tos.errors.as_text }}</p> 
{% endif %} 
{{ form.tos }} 
</p> 
+0

अगर आप 'सरल' वर्कफ़्लो का उपयोग करना चाहते हैं जिसके लिए कोई ईमेल सक्रियण की आवश्यकता नहीं है और उपयोगकर्ता तुरंत सक्रिय हो गया है, इसके बजाय 'view.registration.backends.simple.views पंजीकरणView' आयात करें। – static

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