发送JSON时未设置Django CSRF cookie

时间:2013-10-12 10:28:45

标签: django json cookies csrf django-csrf

我猜这个问题非常蹩脚,但我确实在发布前尝试过所有内容。关于SO的所有问题都没有得到解答。

我的代码如下:

@csrf_protect
def login_view(request):
    if request.method == "GET":
        return HttpResponse(json.dumps(
                   {'username':request.user.username}
               ), mimetype='application/json')

Django在提供此视图时需要向响应添加Set-Cookie标头,但事实并非如此。在我从此视图获得响应后,csrftoken cookie不存在,并且它不在标题中。 CSRFMiddleware已启用并可用于该网站的其他部分。如何让Django设置cookie?

请帮忙!

1 个答案:

答案 0 :(得分:0)

当Django返回json数据时,它不会将cookie值设置为响应头,因此您需要手动在响应对象中设置cookie值。像这样的代码:

@csrf_protect
def login_view(request):
    if request.method == "GET":
        response =  HttpResponse(json.dumps(
                   {'username':request.user.username}
               ), mimetype='application/json')

        response.set_cookie('hello','world')
        return response