如何调试 Django 请求“POST /url/ HTTP/1.1”400

Rob*_*rto 9 python django django-debug-toolbar django-rest-framework

我正在使用 django + django-rest-framework

我正在从 ios 应用程序向本地 python 服务器发送 POST 请求,并收到 400 错误代码。我发现问题出在我发送的 json 正文中,我想在某个地方输出完整的 POST 请求,但我没有运气。

[13/Jan/2016 22:48:45] "POST /url/ HTTP/1.1" 400 75
Run Code Online (Sandbox Code Playgroud)

我不明白如何在运行服务器后打印任何内容(最简单的方法)。有可能吗?

我尝试在设置中启用日志记录,但也没有成功。

LOGGING = {
    'version': 1,
    'handlers': {
        'console':{
            'level':'DEBUG',
            'class':'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.request': {
            'handlers':['console'],
            'propagate': True,
            'level':'DEBUG',
        }
    },
}

import logging.config
logging.config.dictConfig(LOGGING)
Run Code Online (Sandbox Code Playgroud)

我还安装了django 调试工具栏,但它也不显示我发送的请求。我也尝试返回 HttpResponse 但仍然没有得到 POST 请求数据。

在 django 或 django-rest-framework 中输出请求数据(控制台、文件或其他任何内容)的方法是什么?

固定的:

我在views.py中添加了中间件,它扩展了我的控制台输出,如下所示:

class ExceptionLoggingMiddleware(object):
def process_request(self, request):
    print request.body
    print request.scheme
    print request.method
    print request.META
    return None
Run Code Online (Sandbox Code Playgroud)

并且不要忘记将此中间件添加到您的设置文件中,如下所示

MIDDLEWARE_CLASSES = [
'movie.views.ExceptionLoggingMiddleware']
Run Code Online (Sandbox Code Playgroud)

据我了解,我通过设置文件创建的日志记录有效,但它没有输出大量信息,只是输出一些 sql 警告。

小智 4

执行此操作的快速且肮脏的方法是将调试添加到请求处理程序的入口点。在DjangoRestFramework类中以及Django基于类的视图中,此入口点是dispatch()方法。

你可以这样做:

class MyView(View):
    def dispatch(self, request, *args, **kwargs):
        import pdb; pdb.set_trace() # or print debug statements
        super(MyView, self).dispatch(request, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)