我写的,需要一个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