[PYTHON] Implémenter la fonction de connexion avec django-allauth

Suite de la session précédente. http://qiita.com/yukidallas/items/9cd0ca5cda7f459533c3

django-allauth Une bibliothèque qui facilite la mise en œuvre de la connexion sociale sur votre application Django. https://github.com/pennersr/django-allauth

Il semble qu'il prenne actuellement en charge les connexions sociales suivantes.

Installation

Ajoutez django-allauth à requirements.txt et pip install.

requirements.txt


django==1.11
django-allauth==0.31.0 #ajouter à
django-extensions==1.7.8
mysqlclient==1.3.10

terminal


pip install -r requirements.txt -t libs

Inscrivez-vous / connectez-vous avec votre adresse e-mail

Ajoutez django admin et allauth à INSTALLED_APPS.

django-sample/settings.py


INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.messages',
    'django.contrib.sessions',
    'django.contrib.staticfiles',
    'django.contrib.sites',
    'django_extensions',

    'allauth',
    'allauth.account'
]

AUTHENTICATION_BACKENDS = [
   'allauth.account.auth_backends.AuthenticationBackend'
]

Créez une classe View autour de l'inscription / connexion.

django-sample/views.py


from allauth.account import views


class SigninView(views.LoginView):
    template_name = 'signin/index.html'

    def dispatch(self, request, *args, **kwargs):
        response = super(SigninView, self).dispatch(request, *args, **kwargs)
        return response

    def form_valid(self, form):
      return super(SigninView, self).form_valid(form)

signin_view = SigninView.as_view()


class SignupView(views.SignupView):
    template_name = 'signup/index.html'

    def get_context_data(self, **kwargs):
        context = super(SignupView, self).get_context_data(**kwargs)
        return context

signup_view = SignupView.as_view()

Créez le modèle correspondant. Allauth a également un modèle par défaut, mais je l'ai préparé séparément car il est principalement personnalisé. Le code a copié ce qui se trouve dans la bibliothèque allauth.

templates/signin/index.html


{% block content %}
<form method="post" action="{% url 'account_login' %}">
{% csrf_token %}
{{form.as_p}}
<button type="submit">Sign In</button>
</form>
{% endblock %}

templates/signup/index.html


{% block content %}
<form method="post" action="{% url 'account_signup' %}">
  {% csrf_token %}
  {{ form.as_p }}
  {% if redirect_field_value %}
  <input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" />
  {% endif %}
  <button type="submit">Signup</button>
</form>
{% endblock %}

Ajouter un routage.

django-sample/urls.py


urlpatterns = [
  url(r'^$', views.home_view),
  url(r'^auth/', include('allauth.urls')),
  url(r'^signin/?$', views.signin_view),
  url(r'^signup/?$', views.signup_view),
]

Accédez à [http: // localhost: 8000 / signup](http: // localhost: 8000 / signup) et enregistrez-vous en tant qu'utilisateur. Vous pourrez vous connecter à [http: // localhost: 8000 / signin](http: // localhost: 8000 / signin).

Comme vous ne pouvez pas vous déconnecter tel quel, ajoutez la vue et le routage.

django-sample/views.py


from django.shortcuts import redirect


class SignoutView(views.LogoutView):

    def get(self, *args, **kwargs):
        return self.post(*args, **kwargs)

    def post(self, *args, **kwargs):
        if self.request.user.is_authenticated():
            self.logout()
        return redirect('/')

signout_view = SignoutView.as_view()

django-sample/urls.py


urlpatterns = [
  # {...}
  url(r'^signout/?$', views.signout_view)
]

Vous pourrez vous déconnecter à l'adresse [http: // localhost: 8000 / signout](http: // localhost: 8000 / signout).

Connexion SNS avec un compte Twitter

Cette fois, nous mettrons en œuvre la connexion sociale sur Twitter. Veuillez créer une application avec les développeurs Twitter à l'avance. Il semble que vous ne pouvez pas le faire sans enregistrer votre numéro de téléphone. https://apps.twitter.com

Entrez les informations requises dans Créer une nouvelle application → Détails de l'application. Définissez les valeurs suivantes pour l'URL de rappel.

callback_url


http://localhost:8000/auth/twitter/login/callback/

Nous ajouterons des paramètres autour de allauth du côté de Django.

django-sample/settings.py


INSTALLED_APPS = [
    # {...}
    'allauth.socialaccount',
    'allauth.socialaccount.providers.twitter'
]

Ajoutez une route pour accéder à l'admin Django.

django-sample/urls.py


# {...}
from django.contrib import admin
admin.autodiscover()

urlpatterns = [
  # {...}
  url(r'^admin/', include(admin.site.urls))
]

Créez un compte pour vous connecter à l'écran de gestion.

terminal


$ python manage.py createsuperuser

Accédez à [http: // localhost: 8000 / admin](http: // localhost: 8000 / admin) et connectez-vous.

Accédez à COMPTES SOCIAUX> [applications sociales](http: // localhost: 8000 / admin / socialaccount / socialapp / add /) et effectuez divers réglages.

Après l'enregistrement, déconnectez-vous une fois de l'écran de gestion et accédez à [http: // localhost: 8000 / auth / twitter / login /](http: // localhost: 8000 / auth / twitter / login /) pour accéder à l'écran de lien Twitter. Vous pouvez vous connecter (vous inscrire) à SNS.

Si vous souhaitez mettre un lien sur l'écran, procédez comme suit.

templates/home/index.html


<a href="/auth/twitter/login/">Connectez-vous avec Twitter</a>
<!--Ou-->
<a href="{% url 'twitter_login' %}">Connectez-vous avec Twitter</a>

Si vous souhaitez vérifier autour des routes comme des routes ferroviaires, utilisez la commande suivante. (django-extensions)

terminal


$ python manage.py show_urls

#réduction
/auth/twitter/login/	allauth.socialaccount.providers.oauth.views.view	twitter_login	
/auth/twitter/login/callback/	allauth.socialaccount.providers.oauth.views.view	twitter_callback

Pour distinguer si vous êtes connecté ou non, procédez comme suit.

templates/home/index.html


{% if user.is_authenticated %}
<p>Bonjour{{ user.username }}M.</p>
{% else %}
<p>Veuillez vous connecter</p>
{% endif %}

prime

Vous pouvez personnaliser librement le modèle utilisé pour la connexion.

terminal


$ cd ./django-sample/django-sample
$ python ../manage.py startapp accounts

django-sample/settings.py


INSTALLED_APPS = [
     # {...}
    'django-sample.accounts'
]

django-sample/accounts/models.py


from django.db import models
from django.contrib.auth.models import AbstractUser, UserManager


class User(AbstractUser):
    objects = UserManager()

    class Meta(object):
        app_label = 'accounts'

django-sample/settings.py


AUTH_USER_MODEL = 'accounts.User'

Migrez la base de données. Si vous obtenez de la mousse avec migrate, vous pouvez supprimer la base de données et réessayer.

terminal


$ python manage.py makemigrations
$ python manage.py migrate

finalement

J'ai posté la source sur Github pour le moment (j'ai mis à jour la précédente) https://github.com/yukidallas/django-sample

Recommended Posts

Implémenter la fonction de connexion avec django-allauth
Implémentez la fonction de tampon de grande taille avec Discord BOT
Implémenter FReLU avec tf.keras
Client de publication Twitter créé avec Flask avec une fonction de connexion simple
Essayez l'optimisation des fonctions avec Optuna
Implémenter des sous-commandes avec l'argparse de Python
Fonction sinueuse approximative avec TensorFlow
Implémenter la fonction de minuterie dans pygame
Implémenter le GPU PyTorch + avec Docker
[Qt Designer] Implémenter WebView avec PyQt5
Connexion proxy facile avec django-hijack
Zura avec fonction softmax implémentée
Implémentez la blockchain avec environ 60 lignes
Connectez-vous avec Django Rest Framework
[python3] Implémentez facilement la fonction de sortie du journal de débogage avec journalisation et cliquez sur
[Connexion LINE] Vérifier l'état avec Flask
Implémenter la fonction power.prop.test de R en python
Configurer la connexion sociale avec Django
Paramètre de fonction uniquement pour l'astérisque '*'
Perceptron multicouche avec chaînette: ajustement fonctionnel
Implémentez facilement des sous-commandes avec python click
Implémentation de la fonction de connexion dans Django
Approximation de fonction à une variable avec DNN à quatre couches
Implémenter Keras LSTM feed forward avec numpy
Connectez-vous avec PycURL et recevez une réponse
Utilisez la fonction MULTI_ORG avec re: dash
Implémentez "Data Visualization Design # 2" avec matplotlib
Fonction de téléchargement d'image avec Vue.js + Flask