简体   繁体   English

当视图返回json数据时如何设置csrf令牌cookie?

[英]How to set csrf token cookie when a view return a json data?

Here is my signup view, and I use ajax to post. 这是我的注册视图,我使用ajax发布。 I have followed the official document. 我遵循了正式文件。 If the csrftoken cookie exists, it works fine. 如果csrftoken cookie存在,则可以正常工作。

However, the view returning json data didn't set the csrftoken. 但是,返回json数据的视图未设置csrftoken。 How to deal with this? 该如何处理?

def signup(request):
    if request.method == "POST":

        postdata = request.POST.copy()
        form = UserCreationForm(postdata)
        if form.is_valid():
            form.save()
            user = postdata.get('username', '')
            password = postdata.get('password1', '')
            from django.contrib.auth import login, authenticate
            new_user = authenticate(username=user, password=password)
            if new_user and new_user.is_active:
                login(request, new_user)
                data = json.dumps({'success': 'true'})
                return HttpResponse(data, mimetype='application/json')
            else:
                data = json.dumps({'username': '该用户处于非正常状态'})
                return HttpResponse(data, mimetype='application/json')
        else:
            error_list = {}
            for ek in form.errors:
                error_list[ek] = form.errors[ek][0]
            data = json.dumps(error_list)
            return HttpResponse(data, mimetype='application/json')
    else:
        return HttpResponseRedirect("/")

You'll need to set the X-CSRFToken header in your ajax call, refer to the offical docs on csrf with ajax for details. 您需要在ajax调用中设置X-CSRFToken标头,有关使用ajax的信息,请参阅csrf上的官方文档。

https://docs.djangoproject.com/en/1.5/ref/contrib/csrf/#ajax https://docs.djangoproject.com/zh-CN/1.5/ref/contrib/csrf/#ajax

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM