对于模拟Web服务,我编写了一个小Django应用程序,它用作我的Android应用程序查询的Web API。当我向API发出请求时,我也能够交付一个偏移量和限制以仅传输真正必要的数据。无论如何,我遇到了这个问题,Django给了我不同的API查询结果。看起来好像结果是循环赛结果。为什么Django为同一个查询提供了不同的结果?
这是将要运行的Django代码:
def getMetaForCategory(request, offset, limit):
if request.method == "GET":
result = { "meta_information": [] }
categoryIDs = request.GET.getlist("category_ids[]")
categorySet = set(toInt(categoryIDs))
categories = Category.objects.filter(id__in = categoryIDs)
metaSet = set([])
for category in categories:
metaSet = metaSet | set(category.meta_information.all())
metaList = list(metaSet)
metaList.sort()
for meta in metaList[int(offset):int(limit)]:
relatedCategoryIDs = getIDs(meta.category_set.all())
item = {
"_id": meta.id,
"name": meta.name,
"type": meta.type,
"categories": list(categorySet & set(relatedCategoryIDs))
}
result['meta_information'].append(item)
return HttpResponse(content = simplejson.dumps(result), mimetype = "application/json")
else:
return HttpResponse(status = 403)
会发生什么情况是这样的:如果所有MetaInformation
对象将是Foo
,Bar
,Baz
和Blib
,我会的限制设置为0:2
,然后我会得到[Foo, Bar]
与第一个请求和完全相同的请求时,方法将返回[Baz, Blib]
当我第二次运行它。
有没有人看到我在做什么错在这里?还是Django缓存以某种方式进入我的方式?
你可以尝试将问题降低到核心吗?您对查询有疑问。尝试消除其余的视图逻辑。 附注:require_GET很棒(在django.views.decorators.http中找到) – tback 2010-10-20 15:16:25
核心问题是,我在同一个查询中得到不同的结果。但正如丹尼尔所说,这可能是由于我使用套件。有了这篇长文章,我只想尽可能多地提供背景信息。 – philgiese 2010-10-20 15:44:48