【问题标题】:Django - 'collections.OrderedDict' object has no attribute 'headers'Django - 'collections.OrderedDict' 对象没有属性'headers'
【发布时间】:2021-07-30 08:54:45
【问题描述】:

我在 django 上使用我的 dict 和 OrderedDict 收到此错误(不管我使用哪个)。 我正在尝试提交一个 CHECKSUM do paygate,这是我使用数据字典使用我的 md5 哈希生成的。我从 paygate 得到的响应是 PAY_REQUEST_ID 和 CHECKSUM,它在我的 post_payment 方法中用 dict_ 重新生成。我得到了正确的响应,因为我可以看到我的 PAY_REQUEST_ID 和新的 CHECKSUM,但是由于某种原因,弹出了“collections.OrderedDict”对象没有属性“headers”错误,并且我没有在代码中的任何地方使用“headers”。

谁能帮忙找出我做错了什么。

提前致谢

#just for reference i am putting 2 items in dict
response_data = OrderedDict()
data = {
        'PAYGATE_ID'    : '10011072130',
        'REFERENCE'     : 'pgtest_123456789',
       } 
CHECKSUM = calculate_md5(data)
url = 'https://secure.paygate.co.za/payweb3/initiate.trans'
data['CHECKSUM'] =  CHECKSUM
data['url'] = url
hash_valid, response_data = post_payment(data)
if not hash_valid:
    return HttpResponseForbidden('FAILED')
response_data.pop('PAYGATE_ID')
response_data.pop('REFERENCE')
return response_data


def post_payment(data):
   url = data.pop('url')
   response = requests.post(url,data=data)
   dict_ = OrderedDict()
   new = response.text.split('&')
   print(new)
   for item in new:
       list_ = item.split('=')
       key = list_[0]
       value = list_[1]
       dict_[key] = value
   is_equal, dict_['CHECKSUM'] = validate_checksum(dict_)
   return is_equal, dict_

def validate_checksum(data):
   hash_ = data.pop('CHECKSUM')
   new_hash = calculate_md5(data)
   return hash_ == new_hash, new_hash

完整的追溯

response = get_response(request)

AttributeError("'collections.OrderedDict' 对象没有属性 'headers'") 获取响应
要求

response = self.process_response(request, response)

请求 回应
OrderedDict([('PAY_REQUEST_ID', '9D29D540-FED8-9693-FEA1-2D6B64A5868E'), ('校验和', '097e4a83deb5f5c3840ea3e2b69e422e')]) 自我

【问题讨论】:

  • 请发布完整回溯。
  • 我们需要有关该错误的更多信息。我认为这可能是点击劫持保护中间件。您与支付系统进行什么样的互动?
  • response_data 是字典吗?你写return response_data 是在view 中吗?一个视图应该返回一个HttpResponse(或从它继承的东西)对象而不是别的东西。另请参阅如何编写minimal reproducible example(其中一个部分是完整性,即您的示例应该是完整的并且可以自行运行)。
  • response_data = OrderedDict() 我需要将响应数据以表格形式提交给paygate
  • 删除了 return resonse_data 并解决了该错误。谢谢大家

标签: python django attributes


【解决方案1】:

删除了“return resonse_data”并解决了该错误。

CHECKSUM = calculate_md5(data)
url = 'https://secure.paygate.co.za/payweb3/initiate.trans'
data['CHECKSUM'] =  CHECKSUM
data['url'] = url
hash_valid, response_data = post_payment(data)
if not hash_valid:
    return HttpResponseForbidden('FAILED')
response_data.pop('PAYGATE_ID')
response_data.pop('REFERENCE')

【讨论】:

    猜你喜欢
    • 2021-02-04
    • 2021-05-02
    • 2018-03-30
    • 2018-10-01
    • 2020-11-18
    • 2021-07-24
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    相关资源
    最近更新 更多