You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python(Django)中无需本地存储实现Google AdWords API认证求助

解决方案

其实googleads库的AdWordsClient完全支持手动传入凭证参数,不需要局限于LoadFromStorage()从本地文件读取,正好适配你这种多管理员凭证存在数据库的场景,我来给你具体讲下实现步骤:

1. 先定义Django模型存储凭证

首先你需要在Django里建一个模型来保存每个AdWords管理员的凭证信息,比如:

from django.db import models

class AdWordsAccount(models.Model):
    admin_name = models.CharField(max_length=100, unique=True)
    client_id = models.CharField(max_length=200)
    client_secret = models.CharField(max_length=200)
    refresh_token = models.CharField(max_length=200)
    developer_token = models.CharField(max_length=100)
    client_customer_id = models.CharField(max_length=50)  # 格式需为 123-456-7890

    def __str__(self):
        return self.admin_name

把每个管理员的对应凭证存入这个模型即可。

2. 手动初始化AdWordsClient

当需要对接AdWords API时,从数据库取出对应管理员的凭证,然后直接传入AdWordsClient的构造方法,替代LoadFromStorage()

from googleads import adwords

# 假设你要获取某个管理员的凭证,比如根据admin_name查询
account = AdWordsAccount.objects.get(admin_name="张三")

# 手动构建客户端
client = adwords.AdWordsClient(
    developer_token=account.developer_token,
    oauth2_client_id=account.client_id,
    oauth2_client_secret=account.client_secret,
    oauth2_refresh_token=account.refresh_token,
    client_customer_id=account.client_customer_id
)

# 接下来就可以正常使用client调用API了,比如获取广告系列示例
campaign_service = client.GetService('CampaignService', version='v201809')
selector = {'fields': ['Id', 'Name']}
results = campaign_service.get(selector)

3. 注意事项

  • 确保你的developer_token是有效的,并且已经和对应的AdWords账号关联
  • client_customer_id必须严格按照XXX-XXX-XXXX的格式填写,不能省略分隔符
  • 如果遇到OAuth2相关的错误,可以检查refresh_token是否过期,或者client_id/client_secret是否匹配
  • 可以把初始化client的逻辑封装成一个Django工具函数,方便在各个视图或任务中调用

这样你就能轻松支持多个AdWords管理员的凭证管理,完全不需要依赖本地的存储文件啦!

内容的提问来源于stack exchange,提问作者Bryant Makes Programs

火山引擎 最新活动