0

我正在尝试使用两个 ID 访问一个功能并通过 POST 发送一条消息以创建一个小型聊天功能。问题是当我这样做时,我得到一个 403(禁止)。

我如何将其保存在数据库中非常简单:有一个表,其中每个人对应有 2 个键,我在对话字段上进行连接。

我通过 JQuery 拨打电话:

        $('#send-message').bind("enterKey",function(e){
            alert("CLINK");
            $.post( "url/to/send/message/{{personA.id}}/{{personB_id}}", function( data ) {
                $( "#container" ).html( data );
            });
        });
        $('#send-message').keyup(function(e){
            if(e.keyCode == 13)
            {
            $(this).trigger("enterKey");
            }
        });            

并处理它:

def conversation_add(request, trainer_id, trainee_id):
    new_convo = ""
    if request.method == 'POST':
        text = HttpRequest.getlist("messgae")
        convo = Conversation.objects.filter(trainer=trainer_id, trainee=trainee_id)
        new_convo = convo.conversation + text + "\n"
    return render_to_response("plain.html", {'res':new_convo}, context_instance=RequestContext(request))

我不太确定这是否与我获得 403 的原因有关,但我决定发布它并解释一下,以防万一。

关于 Django 的内部结构,我有什么需要考虑的才能进行这个调用吗?

谢谢!

4

1 回答 1

3

看起来您正在访问CSRF 保护,这可以解释 403 禁止响应。

您需要{% csrf_token %}像往常一样在模板中添加,然后在 AJAX POST 上添加请求前回调函数 beforeSend 以发送令牌:

beforeSend: function (request) {
   request.setRequestHeader("X-CSRFToken",
       $('input[name="csrfmiddlewaretoken"]').val());
   },

您也可以禁用保护,但我建议不要这样做。

于 2013-11-03T18:23:50.070 回答