【问题标题】:Web Chatting Application in DjangoDjango 中的网络聊天应用程序
【发布时间】:2019-01-05 17:22:39
【问题描述】:

我是 Django 新手,试图开发一个聊天网络项目并卡住了。有人可以帮助我应该使用哪种方法吗? 我想在不更改 URL 的情况下将文本框数据传递给 Python,但我无法传递它。 我的 Javascript 代码

$("#button").click(function(){
var msg = $('#textbox').val();  
$("<div class='user' id='user'>"+msg+"</div>").insertBefore('.insert_after');
$('.msg_body').scrollTop($('.msg_body')[0].scrollHeight);

我在下面使用了这个 ajax 代码。但是我无法在 views.py 文件中检索结果

$('.ajaxProgress').show();
    $.ajax({
        type: "POST",
        url: "http://localhost:8080/bot/",
        dataType: "json",
        async: true,
        data:{
            csrfmiddlewaretoken: '{{ csrf_token }}',
            message: $('#textbox').val()
        },
        success: function(json){
            $('#test').html(json.message);
            $('.ajaxProgress').hide();
        }
    });
    $('#textbox').val("");

    });

谁能解释我如何在views.py中使用它。我收到 csrf_token 的 Forbidden 错误,

【问题讨论】:

  • 禁止(CSRF 令牌丢失或不正确。):/chat/get 这是我在运行代码后查看的错误消息。
  • 正如你提到的,你在/chat/get 中有禁止错误,然后添加sn-p

标签: django python-3.x


【解决方案1】:

在你的 js 代码中有一个小错误

$(document).ready(function() {
  $("#button").click(function(){
    //some code
    var msg = $('#textbox').val();  
    $('#textbox').val("");                 /*if you are assigning "" to textbox */
    $.ajax({
      type: "POST",
      url: "/bot/",
      dataType: "json",
      async: true,
      data:{
          csrfmiddlewaretoken: '{{ csrf_token }}',
          message: msg                                   /*then here you have to use msg*/
      },
      success: function(json){
        //further code
      }
    });
    $('#textbox').val("");
  });
});

说到csrf_token的禁止错误你必须参考this来解决

参考工作代码here

【讨论】:

  • 谢谢 Onk_r。我确实将 {{csrf_token }} 放在我的表单标签中,并添加了 python 代码....但是我仍然遇到同样的错误
  • 我收到一个警告框,其中包含“errorForbidden”消息,我从传递此警报的工作代码中引用了成功代码。不确定为什么会出现此消息,并且在控制台中显示“禁止(CSRF 令牌丢失或不正确。)”。
  • 你能联系我看看你能不能帮忙
  • 您在 ajax 中的 url 字段出错了您只需在 / 之后添加路径,例如 /bot/
  • 我的机器上仍然有同样的错误。虽然我可以看到味精已正确推送到您的共享代码中。我可以通过应用分享我的屏幕以显示错误吗?
【解决方案2】:

是的,很多人收到这种错误,放在你的 html 的末尾。如果你有一个base.py,你的所有模板都从它扩展而来,你也可以把它放在那里。这解决了 AJAX csrf_token 问题。这可能是一个重复的答案,但我找不到我的其他帖子与此代码。

{% csrf_token %}
<script type="text/javascript">
var csrftoken = jQuery("[name=csrfmiddlewaretoken]").val();

function csrfSafeMethod(method) {
    // these HTTP methods do not require CSRF protection
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
    beforeSend: function(xhr, settings) {
        if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
            xhr.setRequestHeader("X-CSRFToken", csrftoken);
        }
    }
});
</script>

编辑:找到我的另一个帖子。

【讨论】:

  • 我试过这个并得到同样的错误。我认为我的设置中存在一些问题,如果您可以通过屏幕共享查看它会有所帮助。
  • 很可能在您的设置中。如果你发布会很棒。
  • 我不确定您是否帮助我更正了代码。如果是,请您再次分享驱动器链接
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-21
  • 2014-11-03
  • 1970-01-01
  • 1970-01-01
  • 2011-09-28
相关资源
最近更新 更多