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.
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
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).
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 %}
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
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