Django:在ajax调用上login_required [英] Django: login_required on ajax call
本文介绍了Django:在ajax调用上login_required的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试在ajax文章上验证用户,但不起作用。这里我做了什么
I am trying to authenticate user on ajax post but doesn't work. Here what I have done
settings.py
LOGIN_URL = '/accounts/login/'
LOGIN_REDIRECT_URL = '/'
模板
<script>
$('.btn-request').click(function(){
var button = this;
$.ajax({
type: "POST",
url: "{% url 'like' %}",
data: {'tutorial_id': $(this).attr('name'), 'csrfmiddlewaretoken': '{{csrf_token}}'},
dataType: "json",
success: function(json) {
toastr.success(json.message);
},
error: function(rs, e) {
alert(rs.responseText);
}
});
})
</script>
urls.py
url(r'^like/$', 'apps.quotation.views.like', name='like'),
views.py - 尝试1
@login_required
def like(request):
vars = {}
if request.method == 'POST':
response_dict = {}
if not something:
response_dict.update({'message': "Requested" })
else:
response_dict.update({'message': "You have already requested" })
return HttpResponse(simplejson.dumps(response_dict),
mimetype='application/javascript')
views.py - 尝试2
def like(request):
if not request.user.is_authenticated():
return HttpResponseRedirect('/accounts/login')
else:
vars = {}
if request.method == 'POST':
response_dict = {}
if not something:
response_dict.update({'message': "Requested" })
else:
response_dict.update({'message': "You have already requested" })
return HttpResponse(simplejson.dumps(response_dict),
mimetype='application/javascript')
Runserver日志
[05/Mar/2014 05:19:16] "POST /like/ HTTP/1.1" 302 0
[05/Mar/2014 05:19:16] "GET /accounts/login/?next=/like/ HTTP/1.1" 200 5610
我缺少什么?
推荐答案
而不是:
if not request.user.is_authenticated():
return HttpResponseRedirect('/accounts/login')
return json response:
return json response :
if request.user.is_authenticated():
## write your code...
jsonr = json.dumps({ 'authenticated': True })
return HttpResponse(jsonr, mimetype='application/json')
else:
jsonr = json.dumps({ 'authenticated': False })
return HttpResponse(jsonr, mimetype='application/json')
在你的ajax成功响应,如果不通过身份验证,然后使用 windows.location
重定向到登录。
And At your ajax success response , if not authenticated then redirect to login using windows.location
.
strong>你可以编写装饰器:
Django身份验证和Ajax - 需要登录的URL
这篇关于Django:在ajax调用上login_required的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文