10
votes

Comment rediriger les utilisateurs vers une URL spécifique après inscription à Django Enregistrement?

Donc j'utilise l'application Django-Inscription pour implémenter une page d'enregistrement de l'utilisateur pour mon site. J'ai utilisé les backends de Django.Simple vues qui permet aux utilisateurs de se connecter immédiatement après l'inscription. Ma question est de savoir comment puis-je les rediriger vers la page de mon autre application située dans le même répertoire que le projet.

Voici ce que mes URLs principales est: P>

from django.conf import settings
from django.contrib.auth import authenticate
from django.contrib.auth import login
from django.contrib.auth.models import User

from registration import signals
from registration.views import RegistrationView as BaseRegistrationView


class RegistrationView(BaseRegistrationView):
    """
    A registration backend which implements the simplest possible
    workflow: a user supplies a username, email address and password
    (the bare minimum for a useful account), and is immediately signed
    up and logged in).

    """
    def register(self, request, **cleaned_data):
        username, email, password = cleaned_data['username'], cleaned_data['email'], cleaned_data['password1']
        User.objects.create_user(username, email, password)

        new_user = authenticate(username=username, password=password)
        login(request, new_user)
        signals.user_registered.send(sender=self.__class__,
                                     user=new_user,
                                     request=request)
        return new_user

    def registration_allowed(self, request):
        """
        Indicate whether account registration is currently permitted,
        based on the value of the setting ``REGISTRATION_OPEN``. This
        is determined as follows:

        * If ``REGISTRATION_OPEN`` is not specified in settings, or is
          set to ``True``, registration is permitted.

        * If ``REGISTRATION_OPEN`` is both specified and set to
          ``False``, registration is not permitted.

        """
        return getattr(settings, 'REGISTRATION_OPEN', True)

    def get_success_url(self, request, user):
        return (user.get_absolute_url(), (), {})


0 commentaires

3 Réponses :


18
votes

Ne modifiez pas le code dans le module code> enregistrement code>. Au lieu de cela, Sous-classez l'enregistrement code> code> et remplacez la méthode code> get_success_url code> pour renvoyer l'URL souhaitée.

urlpatterns = [
    # your custom registration view
    url(r'^register/$', MyRegistrationView.as_view(), name='registration_register'),
    # the rest of the views from the simple backend
    url(r'^register/closed/$', TemplateView.as_view(template_name='registration/registration_closed.html'),
                          name='registration_disallowed'),
    url(r'', include('registration.auth_urls')),
]


5 commentaires

Où est-ce que je mets exactement la classe myregistrationView? Est-ce que ça marche sur les points de vue.py dans le dossier Backend.Simple ou celui dans le dossier d'inscription?


Comme je l'ai dit ci-dessus, ne changez pas le code dans le module d'enregistrement. Cela en ferait beaucoup, beaucoup plus difficile de passer à la prochaine version de Django-Enregistrement. Vous pouvez mettre la classe dans l'une des visites de votre propre application.py. Vous pouvez l'inclure dans les urls.py si vous préférez, car il n'y a que trois lignes longues.


J'ai donc essayé cela, j'ai mis les deux blocs de code dans les backends.simple.urls.py depuis, le fichier URLs.py principal dans mon dossier de projet fait appel à la simple.urls comme vous pouvez le constater. Il ne fonctionne toujours pas et redirige de la page d'utilisateur / nom d'utilisateur juste après l'inscription (pas de connexion)


J'ai déjà dit déjà de ne pas modifier le code dans le module d'enregistrement. Puisque vous essayez toujours de modifier le backends.simple.urls.py , je ne peux plus vous aider.


Je l'obtiens que je ne devrais pas modifier le code dans le module d'enregistrement, mais les modifications que j'ai faites dans les backends.simple.urls.py devraient le faire fonctionner correctement? Laissez-moi l'essayer exactement de votre chemin et revenez à vous. Merci beaucoup pour l'aide



0
votes

Si vous le souhaitez, vous pouvez modifier le fichier suivant /usr/local/lib/python2.7/dist-packages/registration/Backends/simple/urls.py , changer le chemin, car Exemple:

avant de modifier:

success_url = getattr (paramètres, 'Simple_backend_redirect_url', '/'),

après modification:

success_url = getattr (paramètres, 'Simple_backend_redirect_url', '/ Téléchargement / nouveau'),

Cordialement.

diego


0 commentaires

2
votes

J'utilise django_registration 3.1 Package. J'ai posté tous les 3 fichiers (vues.py urls.pyforms.py) qui sont nécessaires pour utiliser ce package. Pour rediriger l'utilisateur à une URL personnalisée sur l'enregistrement de réussite, créez une vue sur les sous-classes Inscriptionview. Passer dans un succès_url de votre choix.

vues.py: xxx

urls.py: xxx

formes.py: xxx


0 commentaires