【问题标题】:Using Django with $.ajax()将 Django 与 $.ajax() 一起使用
【发布时间】:2015-11-24 03:42:39
【问题描述】:

我正在尝试用 Django 和 Ajax 做一些简单的事情。

我的目标是做一个大厅网站,每个客户都知道大厅里每个人的名字。

我这样做的方式(请耐心等待,即使这是您听说过的最糟糕的方法)是让客户每秒发送一条消息,上面写着“我还在这里!”。如果服务器在 5 秒内没有来自客户端,则该客户端将从大厅中的人员列表中删除。我有这个工作。

我不知道如何将 Django 视图中的玩家姓名列表发送回客户端。我一直在尝试使用 JsonResponse,然后在 $.ajax() 调用的成功函数中接收它,但我似乎无法让它工作。

这是我的$.ajax() 电话:

$.ajax({
        url: apiUpdateUrl,
        method: "post",
        data: {
            csrfmiddlewaretoken: Cookies.get("csrftoken")
        },
        dataType: "json",
        success: function(data) {
            console.log(data.player_list)
        }
});

这是我的 Django 视图:

def update(request):
    if Player.objects.filter(nickname=request.user.username).count() == 0:
        player = Player(nickname=request.user.username, time_joined=datetime.datetime.now())
        player.save()
    else:
        player = Player.objects.get(nickname=request.user.username)
        player.save()
    curr_time = datetime.datetime.now()
    for player in Player.objects.all():
        if (curr_time - player.last_update).total_seconds() >= 5:
            Player.objects.filter(pk=player.pk).delete()

    player_list = [p.nickname for p in Player.objects.all()]
    print(player_list)
    return JsonResponse({"player_list": player_list})

【问题讨论】:

  • 请发布您的代码! :)
  • @kittykittybangbang 我贴出来了
  • 你在data 中得到了什么?试试console.log(data)
  • 没关系,它有效!

标签: python ajax json django


【解决方案1】:

不是解决方案,而是我可以推荐的一些优化-

1) 无需发布请求:您可以进行 get ajax 调用,因为您不发送任何数据。

2) 您可以像这样减少视图中的代码:

def update(request):
    player = Player.objects.get_or_create(defaults={'time_joined': datetime.datetime.now()}, nickname=request.user.username)[0]
    curr_time = datetime.datetime.now()
    Player.objects.filter(last_update__lte=curr_time-datetime.timedelta(seconds=5)).delete()

    player_list = Player.objects.all().values_list('nickname', flat=True)
    print(player_list)
    return JsonResponse({"player_list": player_list})

【讨论】:

  • 不应该将优化作为评论而不是答案。我不会投反对票... :)
猜你喜欢
  • 2015-01-04
  • 1970-01-01
  • 2011-09-03
  • 2014-06-03
  • 2011-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-19
相关资源
最近更新 更多