import requests from django.conf import settings from django.shortcuts import render from django.urls import reverse from django_http_exceptions import HTTPExceptions # Create your views here. def index(request): redirect_uri = request.build_absolute_uri(reverse("instagram_token:exchange")) authorization_url = ( "https://api.instagram.com/oauth/authorize" f"?client_id={settings.INSTAGRAM_CLIENT_ID}" f"&redirect_uri={redirect_uri}" "&scope=user_profile,user_media" "&response_type=code" ) return render( request, "instagram_token/index.html", { "authorization_url": authorization_url } ) def exchange(request): code = request.GET.get("code") if code is None: return reverse("instagram_token:index") exchange_request = requests.post( "https://api.instagram.com/oauth/access_token", data={ "client_id": settings.INSTAGRAM_CLIENT_ID, "client_secret": settings.INSTAGRAM_CLIENT_SECRET, "code": code, "grant_type": "authorization_code", "redirect_uri": request.build_absolute_uri(reverse("instagram_token:exchange")), } ) if not exchange_request.ok: raise HTTPExceptions.BAD_REQUEST exchange_request = exchange_request.json() return render( request, "instagram_token/exchange.html", { "access_token": exchange_request["access_token"], "user_id": exchange_request["user_id"], } )