在Django中接受urls.py上的参数

时间:2013-11-03 18:05:13

标签: python django

我正在尝试访问具有两个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的内部才能打这个电话?

谢谢!

1 个答案:

答案 0 :(得分:3)

看起来你正在点击CSRF protection来解释403禁止的响应。

您需要在模板中正常添加{% csrf_token %},然后在发送AJAX POST之前添加预请求回调函数以发送令牌:

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

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