将json发布到django但得到500错误

时间:2015-01-27 13:07:19

标签: python json django

我正在编写一个应用程序将json发布到Django,但在终端中收到500错误

[27 / Jan / 2015 20:50:38]“POST / datasave / ds / HTTP / 1.1”500 10414

这是我的jQuery代码:

$(function() {
$('#upload').click(function() {
    var json_obj = {
        username: $('#username').val(),
        password: $('#password').val(),
        game_id1: '123',
        csrfmiddlewaretoken: '{{ csrf_token}}'
    };

    $.post("http://192.168.0.109:8000/datasave/ds/", JSON.stringify(json_obj), 
        function(data) {
          alert("OK");
        }, 
        "json");
})
})

Django查看代码:

@csrf_exempt
def ds(request):
    dicty = {}
    if request.is_ajax:
        if request.method == 'POST':
            req = json.loads(request.body.decode("utf-8"))
            obj, created = 
                Gamer.objects.update_or_create(
                username=req.get(u'username', None), 
                password=req.get(u'password', None), 
                game_id1=req.get(u'game_id1', None))
            print obj, created
    dicty['username'] = req.get(u'username', None)
    dicty['password'] = req.get(u'password', None)
    dicty['create_at'] = str(timezone.now())
    return JsonResponse(dicty)

1 个答案:

答案 0 :(得分:1)

当您收到500内部服务器错误时,可能会认为您的视图处理程序代码存在问题。很难说它究竟是什么造成的,所以你应该试着弄清楚它为什么会发生。通过查看代码,我可以看到两个可能导致此错误的事情。

首先你使用dict作为变量名,这可能是一个坏主意,因为dict是python中的内置类型。

另一个可能的原因可能是您访问req词典的方式。您正在访问密钥usernamepasswordgame_id1。如果dict中缺少任何这些,则会抛出KeyError异常。我喜欢使用req.get('username', None)来访问dicts(如果您愿意,可以将None替换为另一个默认值。解决该问题的另一种方法是尝试/捕获异常处理。

此外,根据您的Gamer模型,尝试使用现有用户名创建(假设您有unique=True)也可能会抛出异常,所以您也应该处理它(我认为{{3这里可能很方便)。

通常在处理此类问题时,请在浏览器中使用检查器。它允许您查看请求期间发送和接收的所有数据,这意味着(如果您在DEBUG模式下运行django),您还可以在检查器中查看默认堆栈跟踪页面。它应该对导致问题的原因持有一些有价值的指示。另一种选择是get_or_createwrite a small middleware将错误记录到strout / stderr