我搜索过每一个地方,但之前没有人说过这个错误。
obj将返回一个unicode对象,但它将返回以下错误
Exception Type: AttributeError
Exception Value:'unicode' object has no attribute 'pk'
如果我对响应的结果进行硬编码,则可以正常工作 CustomerAccount.py
from django.contrib.auth.models import User
检查登录
return user
api.py
result = CustomerAccount.login(username, password)
return HttpResponse(json.dumps(result), content_type="application/json")
views.py
import urllib2
import json
res = urllib2.urlopen("http://127.0.0.1:8000/api/login?username=admin&password=admin").read()
obj = json.loads(res)
print obj[0].pk
打印对象的结果:
[{“pk”:1,“model”:“auth.user”,“fields”:{“username”:“admin”,“first_name”:“Admin”,“last_name”:“admin”, “is_active”:true,“is_superuser”:true,“is_staff”:true,“last_login”:“2013-05-29T08:08:43.859Z”,“groups”:[],“user_permissions”:[],“密码“:”pbkdf2_sha256 $ 10000 $ 1HdCOPgsoXvx $ 8jjOpTFVcVAtUshpjJDPEGs / TRq7jeJ2T / 2i55FIPeM =“,”email“:”admin @ admin.com“,”date_joined“:”2013-05-15T07:59:30Z“}}]
答案 0 :(得分:3)
你的类型错了:
obj
是list
obj[0]
是dict
dict
没有pk
属性,但您可以使用"pk"
obj[0]['pk']
的值
答案 1 :(得分:2)
你说你得到了
Exception Value:'unicode' object has no attribute 'pk'
检索obj[0].pk
时。如果是数据类型错误,您将获得'dict' object has no attribute 'pk'
。
问题是您的obj[0]
不是您所期望的dict
,或list
,但它是 unicode字符串。
根据评论,这就是:
再次对其进行JSON编码 。现在你有一个unicode字符串作为JSON对象。
从网址中检索。
pk
......你不能这样做。快速解决方法是将对象解码两次。真正的解决方法是检测双重编码发生的位置并防止发生这种情况。
应该告诉我发生了什么的事实是:
[{"pk": 1, "model": ...
如果那是 Python 对象(而不是JSON编码),那就是:
[{u'pk': 1, u'model': ...