发送请求时从何处获取值?

2024-06-26 13:50:34 发布

您现在位置:Python中文网/ 问答频道 /正文

请帮忙解决这个问题

html格式:

<div class="modal fade" id="commonModal" tabindex="-1" role="dialog" aria-labelledby="commonModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>

                <h4 class="modal-title" id="commonModalLabel">Modal title</h4>
            </div>

            <div class="modal-body">
                ...
            </div>

            <div class="modal-footer">
                <button type="button" class="btn btn-default but_cancel" data-dismiss="modal">Отменить</button>
                <button type="button" class="btn btn-primary but_ok" data-dismiss="modal">Ok</button>
            </div>
        </div>
    </div>
</div>

我发送ajax请求如下:

$('#commonModalLabel').text('Удалить профиль?');
$('#commonModal .modal-body').html('Возможность восстановить профиль будет доступна в течение двух недель. Для восстановления нужно отправить <a href="mailto:prozaik81-2@yandex.ru">администратору</a> ресурса письмо с почтового адреса, который был указан в профиле.');
$('#commonModal').modal('show');    

$('#commonModal .but_ok').on('click', function(){
    console.log('ok');

    $.ajax({
        url: "/accounts/delete_profile/",
        type: 'POST',
        dataType:"json",
        data: {},
        success: function(data) {
            if(data.result == true){
                $('#mySmallModalLabel').text('Профиль удалён');
                $('#infoModal').modal('show');
            }
        }
    });             
});

视图.py:

def delete_profile(request):
    result = False

    if request.method == "POST" and request.is_ajax():
        username = request.POST.get('username', '')     

        try:
            entry = User.objects.get(username=username) 
            entry.is_active = 0
            entry.save()
        except:
            pass
        else:
            result = True

    data = {
        'result': result,       
    }

    return HttpResponse(json.dumps(data), content_type='application/json')      

问题是日志中出现以下错误消息:

Forbidden (CSRF token missing or incorrect.): /accounts/delete_profile/

如果是表单,我会按如下方式发送令牌:

{% csrf_token %}

但在我的情况下,没有形式(!)。请告诉我在哪儿能买到代币,怎么寄


Tags: divtruedatarequesttypeusernamebuttonresult
2条回答

你的问题在django docs中有解释

请注意,如果没有呈现任何表单,django可能不会发送csrf令牌,则必须使用ensure\u csrf decorator

把它放到AJAX请求中

    beforeSend: function(xhr, settings) {
        xhr.setRequestHeader("X-CSRFToken", $.cookie('csrftoken'));
    },

有时它在某些浏览器中不起作用(在我的例子中是chrome),因此您可以将这些添加到发送到视图的数据中:

data['csrfmiddlewaretoken'] = $.csrf_token; 

$.csrf_token对我来说是一个全局对象,我把它直接打印到模板上:

<script type="text/javascript">
    $.csrf_token = '{{ csrf_token }}';
</script>

相关问题 更多 >