How to use different form in Django-Registration

后端 未结 5 1533
小蘑菇
小蘑菇 2021-02-15 15:39

Django-Registration has several form classes in the forms.py file. One is \"class RegistrationFormTermsOfService(RegistrationForm) ..

What do I change in the rest of Dja

5条回答
  •  感动是毒
    2021-02-15 16:20

    Here is a practical example using a custom form and backend which sets username == email address, and only prompts the user for an email address at registration. In, for e.g. 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
    

    In 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\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')),
                       )
    

    Then in your core urls.py, ensure you include:

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

提交回复
热议问题