我正在使用django + django-rest-framework
我正在从ios app向本地python服务器发送POST请求,并获得400错误代码。我得到的问题是我发送的json正文,我想输出完整的POST请求,但我没有运气。
[13/Jan/2016 22:48:45] "POST /url/ HTTP/1.1" 400 75
我不知道如何在runserver之后打印任何东西(最简单的方法)。它甚至可能吗?
我已尝试在设置中启用logging,但也没有运气。
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)
我还安装了django debug toolbar,但它也没有显示我发送的请求。 我还试图返回HttpResponse,但仍然没有获得POST请求数据。
在django或django-rest-framework中输出请求数据(控制台,文件或其他任何内容)的方法是什么?
FIXED:
我在views.py中添加了中间件,扩展了我的控制台输出,如下所示:
class ExceptionLoggingMiddleware(object):
def process_request(self, request):
print request.body
print request.scheme
print request.method
print request.META
return None
并且不要忘记将此中间件添加到您的设置文件中
MIDDLEWARE_CLASSES = [
'movie.views.ExceptionLoggingMiddleware']
另外正如我所理解的那样,我通过设置文件创建了LOGGING,但它输出的信息量不大,只是一些sql警告。
答案 0 :(得分:1)
快速执行此操作的方法是将调试添加到请求处理程序的入口点。在In AppComponent
类中,以及基于<my-app/>
类的视图中,此入口点是DjangoRestFramework
方法。
您可以执行以下操作:
Django
答案 1 :(得分:1)
如果您在本地运行服务器进行开发,我建议您使用PyCharm。它具有内置的Django支持(专业版),因此您可以在调试模式下启动服务器。即使你不买它,你也会有30天的试用期。应该足以找出问题所在。
答案 2 :(得分:0)
这是我的解决方案,受到有关django rest框架(https://commitcode.com/custom-error-handler-in-django-rest-framework)中错误处理的博客文章的启发
我个人使用Sentry(https://sentry.com)捕获我的异常。但是您可以遵循逻辑并放入您想要的任何内容。
首先,我创建一个自定义的异常处理程序,然后使用Django Rest Framework的设置进行连接。
settings.py
REST_FRAMEWORK = {
..settings...
'EXCEPTION_HANDLER': 'myapp.exception_handler_400.custom_exception_handler'
}
接下来,我创建了将处理实际异常的文件。它只是触发任何现有逻辑,然后检查错误是否为400。如果是,则将异常触发给Sentry。
myapp.exception_handler_400
from rest_framework.views import exception_handler
from raven.contrib.django.raven_compat.models import client
def custom_exception_handler(exc, context):
# Call REST framework's default exception handler first,
# to get the standard error response.
response = exception_handler(exc, context)
if response is not None:
if response.status_code == 400:
client.captureException()
return response
答案 3 :(得分:0)
一种选择是输入所需的文本以直接查看错误消息(随HTTP 400返回)。要实现此目的,您必须创建用于Django中出现http 400错误。
urls.py
from django.conf.urls import url, include
urlpatterns = [
url(r'^api/', include('myproject.urls_api')),
]
handler400 = 'project.error_handlers.bad_request'
error_handlers.py
from django import http
from django.conf import settings
def bad_request(request, *args, **kwargs):
return http.HttpResponseBadRequest(
'<h1>Bad Request (400), DEUBG DATA: {}</h1>'.format(settings.ALLOWED_HOSTS),
content_type='text/html')
就我而言,问题在于settings.py中的ALLOWED_HOSTS错误