Я написал небольшой метод, который принимает URL, например:
/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
).
Я пытаюсь найти самый простой способ немного ограничить его. Я могу ограничить его определенными моделями для начинающих, но для таких вещей, как Адреса, мне нужно использовать их в некоторых автозаполнениях, но только пользователи, которые владеют этим адресом, смогут увидеть его.
Я не думаю, что объект request
передается правильно (с аутентифицированным пользователем), когда метод вызывается через ajax, не так ли?
Значит ли это, что мне придется передавать какой-то ключ аутентификации или идентификатор сеанса вместе с каждым запросом? И даже если я получу зарегистрированного пользователя, я не хочу запекать слишком много обработки разрешений для этого одного метода, я не думаю, что он принадлежит ему. Не уверен, как подойти к этой проблеме.