python - TypeError:字符串索引必须是 Django 中的整数
问题描述
我正在尝试将 json 存储到 bigchainDB 中。但问题是当我对 json 对象进行硬编码并在其他节点之间广播时,它会成功。但是当我从邮递员发送相同的 json 对象时,我收到了一个错误string indices must be integers
这是我的功能
def index(request):
root = settings.BIGCHAINDB
bdb = BigchainDB(root)
alice, bob = generate_keypair(), generate_keypair()
insertDB = json.dumps(request.body.decode("utf-8"))
jsonDict = json.loads(insertDB)
prepared_token_tx = bdb.transactions.prepare(
operation='CREATE',
signers=alice.public_key,
recipients=[([bob.public_key], 10)],
asset=jsonDict)
fulfilled_token_tx = bdb.transactions.fulfill(
prepared_token_tx,
private_keys=alice.private_key)
bdb.transactions.send_commit(fulfilled_token_tx)
txid = fulfilled_token_tx['id']
return HttpResponse(txid)
JSON对象:
{“数据”:{“cphNumber”:“321”,“farmName”:“313”,“addressLine1”:“13”,“addressLine2”:“13”,“region”:“13”,“postalCode”: “13”、“corrName”:“13”、“corrAddressLine1”:“131”、“corrAddressLine2”:“31”、“corrRegion”:“31”、“corrCountry”:“321”、“corrPostal”:“31” ”、“corrMobile”:“321”、“corrEmail”:“31”、“agentName”:“31”、“agentAddressLine1”:“313”、“agentAddressLine2”:“132”、“agentRegion”:“13”、 "agentCountry”:“132”,“agentPostal”:“132”,“brn”:“13”,“animalSpecies”:“132”} }
Django Version: 2.1.7
Python Version: 3.7.1
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'api']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback:
File "/home/user/miniconda3/lib/python3.7/site-packages/django/core/handlers/exception.py" in inner
34. response = get_response(request)
File "/home/user/miniconda3/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
126. response = self.process_exception_by_middleware(e, request)
File "/home/user/miniconda3/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
124. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/user/miniconda3/lib/python3.7/site-packages/django/views/decorators/csrf.py" in wrapped_view
54. return view_func(*args, **kwargs)
File "/home/user/Desktop/blockchain/api/views.py" in index
48. asset=jsonDict)
File "/home/user/miniconda3/lib/python3.7/site-packages/bigchaindb_driver/driver.py" in prepare
254. inputs=inputs,
File "/home/user/miniconda3/lib/python3.7/site-packages/bigchaindb_driver/offchain.py" in prepare_transaction
132. inputs=inputs,
File "/home/user/miniconda3/lib/python3.7/functools.py" in wrapper
824. return dispatch(args[0].__class__)(*args, **kw)
File "/home/user/miniconda3/lib/python3.7/site-packages/bigchaindb_driver/offchain.py" in _prepare_create_transaction_dispatcher
45. return prepare_create_transaction(**kwargs)
File "/home/user/miniconda3/lib/python3.7/site-packages/bigchaindb_driver/offchain.py" in prepare_create_transaction
196. asset=asset['data'] if asset else None,
Exception Type: TypeError at /api/
Exception Value: string indices must be integers
任何建议都是最受欢迎的。提前致谢。
解决方案
这里的问题是您正在使用json.dumps()
on request.body
,它已经是一个字符串。因此,当您使用json.loads()
它时,您的数据不会被解析为dict
.
def index(request):
root = settings.BIGCHAINDB
bdb = BigchainDB(root)
alice, bob = generate_keypair(), generate_keypair()
insertDB = request.body.decode("utf-8") # Don't use json.dumps() here
jsonDict = json.loads(insertDB)
prepared_token_tx = bdb.transactions.prepare(
operation='CREATE',
signers=alice.public_key,
recipients=[([bob.public_key], 10)],
asset=jsonDict)
fulfilled_token_tx = bdb.transactions.fulfill(
prepared_token_tx,
private_keys=alice.private_key)
bdb.transactions.send_commit(fulfilled_token_tx)
txid = fulfilled_token_tx['id']
return HttpResponse(txid)
推荐阅读
- javascript - Google 表格脚本 - 无法从属于数据透视表的单元格中获取背景颜色
- python - 如何使用具有零长度字段名称的格式将 Python 2.7+ 代码转换为 2.6 样式命名字段?
- git - 列出作为 git 合并冲突解决的一部分的文件,无论更改如何
- perl - 如何对 Data::Printer 的输出进行排序?
- javascript - Sequelize 从响应中删除枢轴数据
- node.js - 如何修复云错误“必须提供 api_key”
- python - 具有不同组的散点图和每组的边缘直方图
- cypher - 如何在 gremlin 查询中使用多个联合步骤?
- php - 在 PHP 中组合数据以插入 SQL 的最佳方法是什么?
- dm-script - DM 脚本计算具有给定 ROI 的曲线下面积