我寫的,需要一個URL像一個小方法:限制訪問我的Jsonifier的最簡單方法是什麼?
/ajax/places/city?name__icontains=ranch
然後查詢該有自己的名字「牧場」城市city
模型,並返回結果爲JSON:
[
{
"pk":24944,
"model":"places.city",
"fields":{
"province":1,
"data_source":2,
"elevation":null,
"name":"108 Mile Ranch",
"feature_class":null,
"time_zone":null,
"longitude":null,
"feature_code":null,
"mod_date":"2011-02-02 01:33:17",
"latitude":null,
"is_verified":true,
"population":null
}
}, ...
這對於我的各種自動完成小部件會很方便。
方法是這樣的:
def lookup(request, app_label, model_name):
model = get_model(app_label, model_name)
kwargs = dict((k,v) for k,v in request.GET.iteritems())
objects = model.objects.filter(**kwargs)[:25]
json = serializers.serialize('json', objects)
return HttpResponse(json, mimetype='application/json')
唯一的問題是,它爲用戶提供了我的數據庫不受限制的訪問(他們可以鍵入/ajax/auth/user
)。
我試圖找出限制它的最簡單的方法。我可以將它限制爲某些初學者的模型,但對於像地址這樣的東西,我需要在某些自動完成中使用這些模型,但只有擁有該地址的用戶才能看到它。
當通過ajax調用方法時,我認爲request
對象無法正確傳遞(通過身份驗證的用戶),是嗎?
這是否意味着我必須傳遞某種身份驗證密鑰或會話ID以及每個請求?即使我確實獲得了登錄用戶,我也不想將太多的權限處理納入該方法,我不認爲它屬於那裏。不知道如何解決這個問題。
這就是我通常這樣做的方式。我具有特定的控制器操作,允許用戶訪問預定義的安全查詢。哪些操作需要驗證也通過控制器指定。然後,路由引擎解析請求,如果請求以`.json`結尾,則查詢結果將呈現在JSON視圖中。或者,如果它是`.rss`,結果將呈現在RSS視圖中。否則,它將呈現在默認的HTML視圖中。某些操作需要參數(如搜索詞,排序鍵,排序順序等),但不能使用任意查詢。 – 2011-02-03 01:51:05