Utilisateurs personnalisés et enregistrement avec validation par email en utilisant Django et django-registration

En utilisant Django j’ai eu à mettre en place des utilisateurs personnalisés et un système d’authentification nécessitant la validation par courriel. Ce petit tutoriel vous expliquera comment faire cela avec Django 1.10 et le module django-registration.

Configuration de l’email

Dans un premier temps il faut configurer le courriel pour Django. La configuration présentée est valide uniquement pour un environnement de développement. En production il faudra utiliser le backend smtp. Pour tester le courriel en cours de développement ajouter ceci dans le fichier settings.py de votre projet :

Création d’un modèle utilisateur personnalisé

D’abord, il faut créer une application (nommé “customuser” ici), cette création peut s’effectuer via la commande “python manage.py startapp customuser”. Ensuite, il est nécessaire de créer le modèle de l’utilisateur dans le fichier models.py.

Configurer Django pour utiliser notre modèle utilisateur

Pour cela il faut encore modifier le fichier settings.py du projet.

Ajout de templates

Pour la suite, afin de pouvoir tester notre site web nous allons avoir besoin de templates. Il existe des templates fonctionnelles, mais pas très jolies, à télécharger. Extrayez l’archive dans un dossier “templates” que vous avez créée à la racine de votre projet. Vous pourrez les personnaliser après le tutoriel.

Ajout des URLs pour le module django-registration

Dans le fichier urls.py du projet il faut rajouter des URLs pour rendre le projet fonctionnel.

Création du formulaire d’inscription personnalisé

La configuration des URLs faite précédemment nous permet de remplacer les divers formulaires par défaut de django-registration. Par exemple, nous pouvons créer notre propre formulaire d’enregistrement dans le fichier forms.py de notre application.

Pour que le formulaire soit fonctionnel il faut modifier le fichier urls.py de notre application.

Rendre l’interface d’administration plus jolie (optionnel)

Si vous souhaitez voir plus clairement vos utilisateurs via l’interface administration vous pouvez modifier le fichier admin.py de votre application.

Utilisateurs personnalisés et enregistrement avec validation par email en utilisant Django et django-registration par La Réponse est 42 est sous Licence Creative Commons Internationale Attribution-Partage à l'identique 4.0.

Vous aimerez aussi...

6 réponses

  1. Steven kwame Ike dit :

    j’ai un problème au niveau du templates est ce que vous pourriez m’aider la dessus svp?
    le type d’erreur c’est :
    TemplateDoesNotExist at /accounts/register/
    registration/registration_form.html
    Request Method:
    GET
    Request URL:
    http://localhost:8000/accounts/register/
    Django Version:
    1.10.4
    Exception Type:
    TemplateDoesNotExist
    Exception Value:
    registration/registration_form.html
    Exception Location:
    /home/name/Documents/work/.virtualenvs/test1/lib/python3.5/site-packages/django/template/loader.py in select_template, line 53
    Python Executable:
    /home/name/Documents/work/.virtualenvs/test1/bin/python
    Python Version:
    3.5.2
    Python Path:
    [‘/home/name/python_web_project/user_customize_registration’,
    ‘/home/name/Documents/work/.virtualenvs/test1/lib/python35.zip’,
    ‘/home/name/Documents/work/.virtualenvs/test1/lib/python3.5’,
    ‘/home/name/Documents/work/.virtualenvs/test1/lib/python3.5/plat-linux’,
    ‘/home/name/Documents/work/.virtualenvs/test1/lib/python3.5/lib-dynload’,
    ‘/usr/local/lib/python3.5’,
    ‘/usr/local/lib/python3.5/plat-linux’,
    ‘/home/name/Documents/work/.virtualenvs/test1/lib/python3.5/site-packages’,
    ‘/home/name/Documents/work/.virtualenvs/test1/lib/python3.5/site-packages/django_registration-2.2-py3.5.egg’]
    Server time:
    Mon, 2 Jan 2017 04:14:43 +0000

    • Astyan dit :

      Django ne trouve pas les templates que vous avez installées. Vous devriez vérifier si les templates sont bien dans dans le dossier templates/registration/. Si vous avez toujours le problème alors Django cherche les templates dans un autre dossier “TemplateDoesNotExist at /accounts/register/registration/registration_form.html”. Tentez d’extraire l’archive dans le dossier templates/accounts/register/. Si vous avez un lien vers le code je pourrais peut-être vous en dire plus.

      • Michel dit :

        Bonjour ! Le tuto est vraiment bon c’est le gros soucis que j’avais depuis un certain temps,
        Mais moi mon projet je l’ai déjà commencé en utilisant seulement le Model User de django.
        Maintenant est-il possible de faire l’authentification par email à travers l’email entré par l’utilisateur voulant s’inscrire ?
        Utiliser ses propres template pour éviter d’extraire des templates téléchargés.
        Voici mon code d’inscription :

        class InscriptionForm(forms.Form):
        nom_utilisateur =forms.CharField(max_length=50)
        email = forms.EmailField(label=”Votre adresse email”)
        mot_de_passe = forms.CharField(label=”Votre mot de passe”, widget=forms.PasswordInput)
        confirmation_mot_de_passe = forms.CharField(label=”Confirmation du mot de passe”, widget=forms.PasswordInput)

        Quand je récupère les données de la part de l’utilisateur voulant s’inscrire j’utilise la méthode User.objects.create_user en lui passant en paramètre les données reçues, simplement parce que j’ai pas d’autres options.
        Si c’est possible dans mon cas là de faire une authentification par email.
        Voici le fichier views:
        def pour_inscription(request):
        confirmation=False

        personne = InscriptionForm(request.POST)
        if personne.is_valid():
        nom_utilisateur = personne.cleaned_data[“nom_utilisateur”]
        email= personne.cleaned_data[“email”]
        mot_de_passe = personne.cleaned_data[“mot_de_passe”]
        confirmation_mot_de_passe = personne.cleaned_data[“confirmation_mot_de_passe”]

        if mot_de_passe == confirmation_mot_de_passe:

        utilisateur = User.objects.create_user(nom_utilisateur, email,mot_de_passe)
        return redirect(exper)
        else:
        confirmation = True

        return render(request, “inscription/index.html”, locals())

        Si possible de passer par la validation d’inscription par email ? Au secours !

        • Astyan dit :

          Le tutoriel est écrit pour le cas ou vous souhaitez un modèle d’utilisateur personnalisé. Vous pouvez bien entendu utiliser le modèle utilisateur par défaut en sautant et modifiant quelques étapes du tutoriel 😉

          Les templates à télécharger sont vraiment des templates très basique qui permettent de comprendre facilement quelles templates doivent être créer pour django-registration. Vous pouvez allez lire la documentation de django-registration si vous souhaitez créer vos templates sans pour autant télécharger celles que je propose. Cependant, je vous conseil de les télécharger au moins en complément de la documentation.

          Vos problèmes et commentaires m’indique que vous n’utilisez pas django-registration (corrigez moi si je me trompe). Le module django-registration vise à faciliter l’enregistrement et le login des utilisateurs en offrant une couche d’abstraction supplémentaire. Bien sur vous n’êtes pas obliger de l’utiliser, mais l’objet de l’article est l’utilisation de ce module.
          Pour vos problèmes je vous invite à lire la documentation de Django si vous ne souhaitez pas utiliser django-registration.

  2. Michel dit :

    C’est possible de voir sur le fichier views comment envoyer l’email à l’utilisateur ?

    • Astyan dit :

      Pour envoyer un courriel il faut utiliser la fonction send_mail. Sinon le code de django registration est libre, vous pouvez le lire pour trouver ce dont vous avez besoin 😉

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *