在已经使用django.contrib.auth
进行身份验证的Web应用程序限制访问阿贾克斯服务,我在寻找的“标准”的方式限制到只有经过身份验证的用户访问的Ajax服务。使用django.contrib.auth
使用@login_required
装饰不会做,因为那只是重定向未授权的用户登录页面。对于服务,我们应该发回一个有效的,格式良好的错误响应 - 而不是一些登录表单。
这是我想到的第一种方法:
from django.http import HttpResponse
def some_json_service_view(request):
if not request.user.is_authenticated():
return HttpResponse('{success: false}')
return HttpResponse('{success: true}')
把它更远一步,如果我能为所有“未通过身份验证”错误的单一响应标准化,然后一个装饰将是不错:
from django.http import HttpResponse
def login_required_json(f):
def new_f(request):
if not request.user.is_authenticated():
return HttpResponse('{success: false}')
return f(request)
return new_f
@login_required_json
def some_json_service_view(request):
return HttpResponse('{success: true}')
这是人人都这么做的,还是有一种更为接受的方式呢?理想情况下,有人可以指向我为此设计的django.contrib
包。
感谢您的回复,菲利普。获得支持意见总是很好的: - 我打算让这个话题公开几天,看看我们是否有任何相反的观点。我只处理*我的*前端访问服务,但我喜欢公共与私人服务之间的区别。 'django-piston'看起来非常有用,特别是如果你正在编写RESTful接口。 – 2011-03-09 21:24:50