對於模擬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