【发布时间】:2011-06-11 12:36:21
【问题描述】:
在 django 中使用测试客户端时,我遇到了一个非常奇怪的行为。
我正在使用 POST 将数据发送到我的 django 应用程序。我通常通过 iPhone 应用程序和/或测试 html 表单执行此操作。在服务器端,我是这样处理的:
def handle_query(request):
print request
q = con.QueryLog()
q.ID = request.POST.get('ID', '')
q.device = request.POST.get('device-model', '')
....
该打印语句看起来像您所期望的那样,即发布请求中的每个参数都转换为字典中的键:
POST: QueryDict: {u'app-version': [u'3.0'], u'server-version': [u'v3d0'],
但是,我开始使用 Django 的测试客户端编写一些测试,无论我尝试什么,我在 post 请求中发送的 POST 参数字典都会被捆绑到 QueryDict 中的一个键中。请允许我用一些代码来说明:
类 SearchTest(TestCase): 默认设置(自我): 通过
def test_search(self):
request = HttpRequest()
data = '{"amzn_locale": "com"}'
# request._raw_post_data = data
resp = self.client.post(
'/is/',
data=data,
content_type='application/x-www-form-urlencoded',
# content_type='application/json',
)
服务器端同样的打印语句显示字典莫名其妙的分组成字符串:
POST: QueryDict: {u'{"amzn_locale":"com"}': [u'']}>,
如果我将数据设置为实际的字典,同样的事情
data = {"amzn_locale": "com"}
设置 request._raw_post_data 不会改变任何东西。也不会改变
content_type='application/json'
任何帮助将不胜感激。从这个stackoverflow问题看来我不是第一个遇到这个问题的人 iphone Json POST request to Django server creates QueryDict within QueryDict
【问题讨论】: