[PYTHON] Qiita API Oauth avec Django

introduction

Il existe une API pratique pour gérer Qiita appelée API Qiita. https://qiita.com/api/v2/docs

Ceci est un exemple à utiliser avec Django.

Seul Oauth est couvert dans cet article (sinon c'est juste une demande)

Enregistrez l'application à partir de l'URL suivante. https://qiita.com/settings/applications

Vous pouvez obtenir l'ID client et le secret client.

Autour de l'authentification

GET /api/v2/oauth/authorize

Affichez l'écran d'autorisation de l'utilisateur. Si l'utilisateur l'autorise, «code» sera ajouté à l'URL de rappel spécifiée dans l'enregistrement de l'application ci-dessus.

De plus, spécifiez «scope» et «state» avec des paramètres.

Concernant la portée, ici

state vous permet de spécifier la valeur incluse dans la requête de l'URL à rediriger pour les contre-mesures CSRF.

python


state = random.randint(1,100000)
request.session['qiita_state'] = state
return redirect(QIITA_OAUTH_URL + '?client_id=' + QIITA_CLIENT_ID + '&state=' + str(state) + '&scope=read_qiita+write_qiita')

Puisque «state» n'a pas de sens à moins qu'il ne s'agisse d'une valeur aléatoire, il est généré de manière aléatoire et enregistré dans la session.

POST /api/v2/access_tokens

Vous avez maintenant un jeton d'accès. Utilisez le code que vous avez obtenu de GET / api / v2 / oauth / authorize plus tôt.

En même temps, utilisez «client_id» et «client_secret» obtenus en enregistrant l'application.

python


@csrf_exempt
def qiita_oauth(request):
    if request.method == 'GET':
        state = request.session['qiita_state']
        if state == int(request.GET.get("state")):
            if "code" in request.GET:
                code = request.GET.get("code")
                body = {
                        'client_id': QIITA_CLIENT_ID,
                        'client_secret': QIITA_CLIENT_SECRET,
                        'code': code
                        }
                header = {
                        'Content-Type': 'application/json',
                        }
                req = urllib.request.Request(QIITA_ACCESSTOKEN_URL, json.dumps(body).encode(), header)
                try:
                    with urllib.request.urlopen(req) as res:
                        #Traitement post-succès
                except urllib.error.HTTPError as err:
                    #Traitement après échec de la demande
                except urllib.error.URLError as err:
                    #Traitement après échec de la demande
            else:
                #traitement après l'échec de l'authentification de l'état

ʻIf state == int (request.GET.get ("state")): `vérifie si l'état est correct.

Recommended Posts

Qiita API Oauth avec Django
Twitter OAuth avec Django
Accédez à l'API Twitter après l'authentification Oauth avec Django
Quine Post avec l'API Qiita (Python)
API GraphQL utilisant graphene_django dans Django
CRUD avec Django
Essayez l'authentification OAuth Slack avec Flask (API Slack V2)
Création récente de classement à l'aide de l'API Qiita avec Python
Authentifier Google avec Django
Django 1.11 a démarré avec Python3.6
Télécharger des fichiers 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
Extruder avec l'API Fusion360
Utilisez LESS avec Django
La mutualisation mécanise avec Django
Utiliser MySQL avec Django
Django à partir d'aujourd'hui
Premiers pas avec Django 2
[Python] Obtenez des informations sur les utilisateurs et des articles sur l'API de Qiita
Faites Django avec CodeStar (Python3.6.8, Django2.2.9)
Utiliser l'API Trello avec python
Lancez-vous avec Django! ~ Tutoriel ⑤ ~
Environnement de site Web de configuration minimale avec django
Utiliser l'API Twitter avec Python
Faites Django avec CodeStar (Python3.8, Django2.1.15)
API avec Flask + uWSGI + Nginx
Déployer Django sans serveur avec Lambda
Premiers pas avec Python Django (1)
Créer une page d'accueil avec django
Obtenir des informations avec l'API Zabbix
Lancez-vous avec Django! ~ Tutoriel ④ ~
Premiers pas avec Python Django (4)
Créer une application Web avec Django
J'ai essayé de toucher l'API Qiita
Premiers pas avec Python Django (3)
Combinez Fast API avec Django ORM
Lancez-vous avec Django! ~ Tutoriel ⑥ ~
API Web avec Python + Falcon
Utilisez Django pour enregistrer les données de tweet
Effectuer le cryptage AES avec DJango
[Article traduit] Fast API est en fait très compatible avec Django
Créez une API Web capable de fournir des images avec Django
Introduction à Python Django (6)
Soutenez-vous avec l'API Twitter
Appelez l'API avec python3.
Combinez deux images avec Django
Premiers pas avec Django avec PyCharm
Utiliser l'API subsonique avec python3
Web en temps réel avec les chaînes Django
(Pour les débutants) Essayez de créer une API Web simple avec 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