如何使用Django和pdb调试Web请求?

时间:2019-04-15 19:17:38

标签: python django

我想使用pdb调试Django中的视图,但到目前为止,我一直没有成功,但是遇到了BdbQuit错误:

我尝试过的视图是一个简单的get请求:

def get_file_names(request):
    pdb.set_trace()
    my_files = Files.objects.filter(user_id=request.user))
    name_list += list(map(lambda x: (x.id, x.name, x.description),
                          my_files))

    return JsonResponse({'rows': name_list})

一些注意事项:

  • 我不想使用Django pdb,因为这会迫使我修改客户端的请求参数。

  • 我也不想从pdb调用我的代码(因为该代码正在 从客户端调用)。

  • Django 1.10.6版
  • 该应用程序正在docker容器中运行

有人有可行的解决方案吗?我发现用python调试复杂的Web请求可能非常繁琐,而且如果pdb可以工作的话,那真的很棒。

请注意,这不是一个子流程,只是一个简单的get请求(最终,我希望它可以处理更复杂的请求,但由于此操作已经失败,因此我发布了一个简单的示例)。

有什么建议吗?建议here似乎无效。

1 个答案:

答案 0 :(得分:0)

要在容器中运行的Django应用程序中运行pdb,必须使用-it标志运行。

docker run -it .... djangoimage

如果您运行的是独立(-d),则可以附加到容器docker attach $IDCONTAINER

如果您正在使用docker-compose运行:

services:
  django:
    # ...
    stdin_open: true
    tty: true

然后在运行docker attach时使用pdb附加到Django容器。