开发者

How to disable email activation in django-registration app?

How to disab开发者_如何学JAVAle email activation in django-registration app?


In the current tip versions of django-registration there is a simple backend with no email and you can write your own backend to specify the workflow you want. See here https://bitbucket.org/ubernostrum/django-registration/src/fad7080fe769/docs/backend-api.rst for documentation.

To use the simple one without email, just change your urls.py to point to this backend, eg.

   (r'^accounts/', include('registration.backends.simple.urls')),    


Why not use this method and just use the simple backend that comes with django-registration instead of the default backend?

The new work flow would be... 1. A user signs up by filling out a registration form. 2. The user’s account is created and is active immediately, with no intermediate confirmation or activation step. 3. The new user is logged in immediately.

so on your main urls.py you would change:

url(r'^accounts/', include('registration.backends.default.urls')),

to

url(r'^accounts/', include('registration.backends.simple.urls')),


Better to fix the problem at the root than bandage it by calling commands to automatically activate the user.

Add this method to registration models.py:

   def create_active_user(self, username, email, password,
                             site):
        """
        Create a new, active ``User``, generate a
        ``RegistrationProfile`` and email its activation key to the
        ``User``, returning the new ``User``.
        """
        new_user = User.objects.create_user(username, email, password)
        new_user.is_active = True
        new_user.save()

        registration_profile = self.create_profile(new_user)

        return new_user
    create_active_user = transaction.commit_on_success(create_active_user)

Then, edit registration/backend/defaults/init.py and find the register() method.

Change the following to call your new method:

#new_user = RegistrationProfile.objects.create_inactive_user(username, email,
                                                            #password, site)
new_user = RegistrationProfile.objects.create_active_user(username, email,
                                                            password, site)


You could always modify this line to:

new_user = RegistrationProfile.objects.create_inactive_user(username=self.cleaned_data['username'],
                                       password=self.cleaned_data['password1'],
                                       email=self.cleaned_data['email'],
                                       profile_callback=profile_callback,
                                       send_email = False)

Or you could change this line to:

def create_inactive_user(self, username, password, email,
                         send_email=False, profile_callback=None):


Rather than modifying the registration app, why not just activate the user the same way django-registration does:

user.is_active = True user.save() profile.activation_key = "ALREADY_ACTIVATED" profile.save()

After looking at it even more... I think what you want is to use both solutions. Probably add the above code, just after the change suggested by Dominic (though I would suggest using signals, or subclassing the form if possible)

OK final Answer:

new_user = RegistrationProfile.objects.create_inactive_user(username=self.cleaned_data['username'],
                                   password=self.cleaned_data['password1'],
                                   email=self.cleaned_data['email'],
                                   profile_callback=profile_callback,
                                   send_email = False)
RegistrationProfile.objects.activate_user(new_user.activation_key)
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜