[PYTHON] Twitter OAuth avec Django

J'ai profité de cet article et l'ai posté. J'essaierai également l'authentification Twitter sur Django.

[Note] Twitter OAuth avec pyramide http://qiita.com/maueki/items/02f001440ce409641a50

Authentification utilisateur standard Django

Avant l'authentification Twitter, Django est livré avec l'authentification des utilisateurs depuis le début. Voyons d'abord cela.

Préparation environnementale

Tout d'abord, installez django.

$ pip install django

Cette fois, je l'ai essayé avec la version 1.10.5. Python est 3.5.2. Ensuite, créez un projet Django et créez un utilisateur administrateur.

$ django-admin startproject myoauth
$ cd myoauth
$ python manage.py migrate
$ python manage.py createsuperuser

Ensuite, créez une application.

$ python manage.py startapp app

Ajoutez l'application créée à INSTALLED_APPS dans settings.py. (Au fait, il peut être bon de changer les paramètres régionaux)

setting.py


INSTALLED_APPS = (
    :
    'app.apps.AppConfig',
)

LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'

Les détails de cette zone peuvent être facilement compris en regardant le tutoriel du chef de famille. https://docs.djangoproject.com/ja/1.9/intro/tutorial01/

Page de connexion / déconnexion

ʻConnectez-vous à urls.py` et spécifiez l'url et la vue pour la déconnexion. vue est préparée en standard. (la vue est une vue avec un modèle MTV.)

urls.py


import django.contrib.auth.views

urlpatterns = [
    :
    url(r'^login/$',
        django.contrib.auth.views.login,
        {
            'template_name': 'app/login.html',
        },
        name='login'),
    url(r'^logout/$',
        django.contrib.auth.views.logout,
        {
            'template_name': 'app/logout.html',
        },
        name='logout'),
]

login.html est préparé comme ceci.

login.html


:
<form method="post" action="{% url 'login' %}">
{% csrf_token %}
<table>
<tr>
    <td>{{ form.username.label_tag }}</td>
    <td>{{ form.username }}</td>
</tr>
<tr>
    <td>{{ form.password.label_tag }}</td>
    <td>{{ form.password }}</td>
</tr>
</table>

<input type="submit" value="login" />
<input type="hidden" name="next" value="{{ next }}" />
</form>
:

Décrivez l'URL qui sera redirigée après la connexion à setting.py et l'URL qui sera déplacée lorsque vous accédez à la page restreinte décrite plus loin.

setting.py


LOGIN_REDIRECT_URL = '/'
LOGIN_URL = '/login/'

Vérifier l'état de connexion

Si vous ajoutez le décorateur login_required à la vue, vous ne pouvez le limiter que lorsque vous êtes connecté. Si vous n'êtes pas connecté, vous serez redirigé vers le LOGIN_URL défini dans setting.py.

views.py


from django.contrib.auth.decorators import login_required

@login_required
def private(request):
    ...

urls.py


urlpatterns = [
    :
    url(r'^private/$', app.views.private, name='private'),
]

De plus, vous pouvez utiliser le décorateur ʻuser_passes_test` pour ajouter des vérifications arbitraires aux utilisateurs dans le lambda. L'exemple ci-dessous est limité aux privilèges de super utilisateur.

views.py


from django.contrib.auth.decorators import user_passes_test

@user_passes_test(lambda u: u.is_superuser)
def private(request):
    ...

Authentification Twitter

Ensuite, essayez l'authentification Twitter.

Enregistrement de l'application

En guise de préparation préliminaire, enregistrez l'application depuis la page développeur de Twitter. https://apps.twitter.com

Vous aurez besoin de ces deux clés.

Bibliothèque ajoutée pour OAuth

Il semble y avoir différentes options, mais cette fois j'ai utilisé social-auth-app-django. En plus de Twitter, Facebook et GitHub peuvent être utilisés de la même manière.

$ pip install python-social-auth[django]

La version que j'ai essayée cette fois est la 1.0.0.

setting.py


INSTALLED_APPS = (
    :
    'social_django',
)

TEMPLATES = [
    {
        :
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'django.template.context_processors.media',
                'django.template.context_processors.static',
                'social_django.context_processors.backends',
                'social_django.context_processors.login_redirect',
            ],
        },
    },
]

AUTHENTICATION_BACKENDS = [
    'social_core.backends.twitter.TwitterOAuth',
    'django.contrib.auth.backends.ModelBackend',
]

SOCIAL_AUTH_TWITTER_KEY = 'Consumer Key'
SOCIAL_AUTH_TWITTER_SECRET = 'Consumer Secret'

Vous pouvez préparer un bouton pour passer à l'authentification Twitter comme celui-ci.

login.html


<button type="button" onclick="location.href='{% url 'social:begin' 'twitter' %}'">Twitter</button>

urls.py


urlpatterns = [
    :
    url(r'', include('social_django.urls', namespace = 'social')),
]

Depuis que j'ai ajouté une application, je vais la migrer à la fin.

$ python manage.py migrate

Vous pouvez maintenant vous authentifier avec Twitter. Après l'authentification, il sera ajouté au modèle utilisateur standard de Django, afin que vous puissiez vérifier l'état de connexion de la même manière que l'authentification utilisateur standard.

Recommended Posts

Twitter OAuth avec Django
Qiita API Oauth avec Django
Accédez à l'API Twitter après l'authentification Oauth avec Django
Application de publication sur Twitter réalisée avec Django
Internationalisation avec Django
CRUD avec Django
Authentifier Google avec Django
Django 1.11 a démarré avec Python3.6
Télécharger des fichiers avec Django
Résumé du développement avec Django
Sortie PDF avec Django
Sortie Markdown avec Django
Utiliser Gentelella avec Django
Premiers pas avec Django 1
Envoyer des e-mails avec Django
Téléchargement de fichiers avec django
Utilisez LESS avec Django
La mutualisation mécanise avec Django
Utiliser MySQL avec Django
Django à partir d'aujourd'hui
Premiers pas avec Django 2
Faites Django avec CodeStar (Python3.6.8, Django2.2.9)
Lancez-vous avec Django! ~ Tutoriel ⑤ ~
Environnement de site Web de configuration minimale avec django
Créer une API avec Django
Mémo graphique Twitter avec Python
Obtenez la chronologie Twitter avec Python
Utiliser l'API Twitter avec Python
Extraire les données Twitter avec CSV
Faites Django avec CodeStar (Python3.8, Django2.1.15)
Déployer Django sans serveur avec Lambda
Python3 + Django ~ Mac ~ avec Apache
Premiers pas avec Python Django (1)
Créer une page d'accueil avec django
Lancez-vous avec Django! ~ Tutoriel ④ ~
Premiers pas avec Python Django (4)
Créer une application Web avec Django
Premiers pas avec Python Django (3)
Combinez Fast API avec Django ORM
Lancez-vous avec Django! ~ Tutoriel ⑥ ~
Utilisez Django pour enregistrer les données de tweet
Effectuer le cryptage AES avec DJango
Introduction à Python Django (6)
Soutenez-vous avec l'API Twitter
Combinez deux images avec Django
Rechercher des tweets Twitter avec Python
Premiers pas avec Django avec PyCharm
Web en temps réel avec les chaînes Django
Suppression de double envoi avec Django
Framework Django REST avec Vue.js
Update_with_media réussi avec l'API Twitter
Utilisez prefetch_related commodément avec Django
Premiers pas avec Python Django (5)
Connectez-vous avec Django Rest Framework
Développement piloté par les tests avec Django Partie 3
Étapes pour développer Django avec VSCode
Développement piloté par les tests avec Django Partie 4
Configurer la connexion sociale avec Django
Développement piloté par les tests avec Django Partie 6
Mesurer la couverture des applications Django avec Coverage.py