我正在尝试访问具有两个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的内部才能打这个电话?
谢谢!
答案 0 :(得分:3)
看起来你正在点击CSRF protection来解释403禁止的响应。
您需要在模板中正常添加{% csrf_token %}
,然后在发送AJAX POST之前添加预请求回调函数以发送令牌:
beforeSend: function (request) {
request.setRequestHeader("X-CSRFToken",
$('input[name="csrfmiddlewaretoken"]').val());
},
你也可以禁用保护,但我会建议不要这样做。