Я пытаюсь интегрировать Google Tag Manager в свой проект. В официальном документе Google предлагает библиотеку oauth2client. К сожалению, эта библиотека устарела. Я использовал google_auth_oauthlib. Я могу получить токен и отправить запрос API Google Tag Manager с помощью этого токена. Но я не решаю, как мне сохранить объект учетных данных в Django. В oauth2client lib есть CredentialsField для модели. Мы можем сохранить объект Credentials в этом поле с помощью DjangoORMStorage. Но я не могу использовать эту устаревшую библиотеку. Существуют ли альтернативные способы?
Документ диспетчера тегов Google здесь
Мои коды здесь:
from google_auth_oauthlib.flow import Flow
from googleapiclient.discovery import build
FLOW = Flow.from_client_secrets_file(
settings.GOOGLE_OAUTH2_CLIENT_SECRETS_JSON,
scopes=[settings.GOOGLE_OAUTH2_SCOPE])
class GTMAuthenticateView(APIView):
def get(self,request,**kwargs):
FLOW.redirect_uri = settings.GOOGLE_OAUTH2_REDIRECT_URI
authorization_url, state = FLOW.authorization_url(access_type='offline',
include_granted_scopes='true')
return Response({'authorization_url':authorization_url,'state':state})
def post(self, request, **kwargs):
FLOW.fetch_token(code=request.data['code'])
credentials = FLOW.credentials
return Response({'token':credentials.token})
class GTMContainerView(APIView):
def get(self,request,**kwargs):
service = get_service()
containers = self.get_containers(service)
return Response({'containers':str(containers),'credentials':str(FLOW.credentials)})
@staticmethod
def get_containers(service):
account_list = service.accounts().list().execute()
container_list = []
for account in account_list['account']:
containers = service.accounts().containers().list(parent=account["path"]).execute()
for container in containers["container"]:
container["usageContext"] = container["usageContext"][0].replace("['", "").replace("']", "")
container_list.append(container)
return container_list
def get_service():
try:
credentials = FLOW.credentials
service = build('tagmanager', 'v2', credentials=credentials)
return service
except Exception as ex:
print(ex)