python中byte和str类型区别_python3打印bytestring并说string的类型是str?

我的代码来自一个单一的登录函数from urllib.parse import unquote

import base64

payload = unquote(payload)

print(payload)

print(type(payload))

decoded = base64.decodestring(payload)

decodestring抱怨我给它一个字符串而不是字节。。。在File "/Users/Jeff/Development/langalang/proj/discourse/views.py", line 38, in sso

decoded = base64.decodestring(payload)

File "/Users/Jeff/.virtualenvs/proj/lib/python3.6/base64.py", line 559, in decodestring

return decodebytes(s)

File "/Users/Jeff/.virtualenvs/proj/lib/python3.6/base64.py", line 551, in decodebytes

_input_type_check(s)

File "/Users/Jeff/.virtualenvs/proj/lib/python3.6/base64.py", line 520, in _input_type_check

raise TypeError(msg) from err

TypeError: expected bytes-like object, not str

这很好,但是当我看到打印到终端上的报表时,我看到了这个。。。在

^{pr2}$

它似乎在说它是一个字节串,但它说它是一个字符串。在

这是怎么回事?在

如果我在有效负载声明的末尾添加一个encode(),我会看到。。。在payload = unquote(payload).encode()

b"b'bm9uY2U9NDQxMTQ4MzIyNDMwNjU3MjcyMDM=\\n'"

编辑:添加生成有效负载的方法@patch("discourse.views.HttpResponseRedirect")

def test_sso_success(self, mock_redirect):

"""Test for the sso view"""

# Generating a random number, encoding for url, signing it with a hash

nonce = "".join([str(random.randint(0, 9)) for i in range(20)])

# The sso payload needs to be a dict of params

params = {"nonce": nonce}

payload = base64.encodestring(urlencode(params).encode())

print(payload.decode() + " tests")

key = settings.SSO_SECRET

h = hmac.new(key.encode(), payload, digestmod=hashlib.sha256)

signature = h.hexdigest()

url = reverse("discourse:sso") + "?sso=%s&sig=%s" % (payload, signature)

req = self.rf.get(url)

req.user = self.user

response = sso(req)

self.assertTrue(mock_redirect.called)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值