【实例代码疑惑】get_token可以不传secret吗?如果不传具体如何实现?

基本信息

被测对象:企业微信
实现模块:WeWork 类获取 token 方法

问 题

  1. get_token可以传入空值吗?
  2. 如果可以,具体怎么实现可以说一下吗?
  3. 每个应用都有自己的secret,默认secret要怎么设置呢?

@seveniruby 希望思寒老师可以解答一下~~ :grimacing:

思 考

if secret is None:这一段代码不太懂。。如果secret为空,也就是传入的空值,则返回token[secret]的key不就是None?

假如取的不是None,而是WeWork的变量secret,而看视频发现这个secret取的是“十一期测试开发”这个应用的secret,可能只是随机取的,那如果要设置默认值的话,取哪个比较好?

每个应用都要自己的secret,不传就不知道是哪个应用了,十分困惑,求解答。

class WeWork(BaseApi):
 token_url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"
 corpid = 'wwd6da61649bd66fea'
 token = dict()
 token_time = dict
 secret = "3XBa77sS_W304tGdt-Sc-YManyJ5sKlwq4dSzrIzE_g"

 @classmethod
 def get_token(cls, secret=secret):
     # todo:
     # 这里判空的处理不太明白???
     if secret is None:
         # todo: token制度发生变化,在这个地方决定是否重新获取
         return cls.token[secret]
     # 避免重复请求,提高速度
     if secret not in cls.token.keys():
         r = cls.get_access_token(secret)
         cls.token[secret] = r["access_token"]
         # cls.token_time[secret] = datetime.now()
     return cls.token[secret]

 @classmethod
 def get_access_token(cls, secret):
     r = requests.get(
         cls.token_url,
         params={"corpid": cls.corpid, "corpsecret": secret}
     )
     cls.format(r)
     assert r.json()["errcode"] == 0
     return r.json()

实例代码

https://github.com/seveniruby/HogwartsSDET11

建议好好听课, 这段代码课上说:代码有问题,用不到,后面会改,暂时标记为todo。

可以实现,不传secrete参数就可以了

哦,视频反复看3遍了,那只能坐等周末思寒讲解了…