[PYTHON] Qiita API Oauth mit Django

Einführung

Es gibt eine praktische API für die Handhabung von Qiita, die Qiita-API. https://qiita.com/api/v2/docs

Dies ist ein Beispiel für Django.

In diesem Artikel wird nur Oauth behandelt (ansonsten handelt es sich nur um eine Anfrage).

Registrieren Sie die Anwendung unter der folgenden URL. https://qiita.com/settings/applications

Sie können "Client ID" und "Client Secret" erhalten.

Rund um die Authentifizierung

GET /api/v2/oauth/authorize

Zeigen Sie den Autorisierungsbildschirm für den Benutzer an. Wenn der Benutzer zustimmt, wird "Code" zu der Rückruf-URL hinzugefügt, die in der obigen Anwendungsregistrierung angegeben ist.

Geben Sie außerdem "scope" und "state" mit Parametern an.

Klicken Sie hier, um den Umfang anzuzeigen (https://qiita.com/api/v2/docs#%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97).

Mit state können Sie den Wert angeben, der in der Abfrage der URL enthalten ist, um für CSRF-Gegenmaßnahmen umzuleiten.

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')

Da "state" bedeutungslos ist, es sei denn, es handelt sich um einen zufälligen Wert, wird er zufällig generiert und in der Sitzung gespeichert.

POST /api/v2/access_tokens

Jetzt haben Sie ein Zugriffstoken. Verwenden Sie den Code, den Sie zuvor von GET / api / v2 / oauth / authorize erhalten haben.

Verwenden Sie gleichzeitig die client_id und client_secret, die Sie durch Registrieren der Anwendung erhalten haben.

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:
                        #Post-Success-Verarbeitung
                except urllib.error.HTTPError as err:
                    #Verarbeitung nach Anforderungsfehler
                except urllib.error.URLError as err:
                    #Verarbeitung nach Anforderungsfehler
            else:
                #Verarbeitung nach Statusauthentifizierungsfehler

if state == int (request.GET.get (" state ")): prüft, ob der Zustand korrekt ist.

Recommended Posts

Qiita API Oauth mit Django
Twitter OAuth mit Django
Klicken Sie nach der Oauth-Authentifizierung mit Django auf die Twitter-API
Quine Post mit Qiita API (Python)
GraphQL-API mit graphene_django in Django
CRUD mit Django
Versuchen Sie eine lockere OAuth-Authentifizierung mit einem Kolben (Slack API V2).
Letzte Ranglistenerstellung mit der Qiita-API mit Python
Authentifizieren Sie Google mit Django
Django 1.11 wurde mit Python3.6 gestartet
Laden Sie Dateien mit Django hoch
PDF mit Django ausgeben
Markdown-Ausgabe mit Django
Verwenden Sie Gentelella mit Django
Erste Schritte mit Django 1
Mail mit Django senden
Datei-Upload mit Django
Extrudieren Sie mit der Fusion360-API
Verwenden Sie WENIGER mit Django
Pooling mechanisieren mit Django
Verwenden Sie MySQL mit Django
Django ab heute
Erste Schritte mit Django 2
[Python] Mit der API von Qiita erhalten Sie Benutzer- und Artikelinformationen
Mach Django mit CodeStar (Python3.6.8, Django2.2.9)
Verwenden Sie die Trello-API mit Python
Fangen Sie mit Django an! ~ Tutorial ⑤ ~
Minimale Konfigurations-Website-Umgebung mit Django
Verwenden Sie die Twitter-API mit Python
Mach Django mit CodeStar (Python3.8, Django2.1.15)
API mit Flask + uWSGI + Nginx
Stellen Sie Django serverlos mit Lambda bereit
Erste Schritte mit Python Django (1)
Erstellen Sie eine Homepage mit Django
Informationen erhalten Sie mit zabbix api
Fangen Sie mit Django an! ~ Tutorial ④ ~
Erste Schritte mit Python Django (4)
Erstellen Sie eine Webanwendung mit Django
Ich habe versucht, die Qiita-API zu berühren
Erste Schritte mit Python Django (3)
Kombinieren Sie Fast API mit Django ORM
Fangen Sie mit Django an! ~ Tutorial ⑥ ~
Web-API mit Python + Falcon
Verwenden Sie Django, um Tweet-Daten zu speichern
Führen Sie eine AES-Verschlüsselung mit DJango durch
[Übersetzter Artikel] Fast API ist eigentlich sehr kompatibel mit Django
Erstellen Sie eine Web-API, die Bilder mit Django liefern kann
Einführung in Python Django (6)
Unterstützen Sie sich mit der Twitter API
Rufen Sie die API mit python3 auf.
Kombiniere zwei Bilder mit Django
Erste Schritte mit Django mit PyCharm
Verwenden Sie die Unterschall-API mit Python3
Echtzeit-Web mit Django-Kanälen
(Für Anfänger) Versuchen Sie, mit Django eine einfache Web-API zu erstellen
Doppelte Submit-Unterdrückung mit Django
Django REST Framework mit Vue.js
Erfolgreiches update_with_media mit Twitter API
Verwenden Sie prefetch_related bequem mit Django