【问题标题】:how to log all request in tastypie django如何在tastepie django中记录所有请求
【发布时间】:2017-02-27 19:03:05
【问题描述】:

我在 django 中使用了 sweetpie 来处理 REST api 请求。每当我执行 GET/POST 请求时,默认情况下都会使用脱水方法。但是对于 DELETE/PUT 请求,它没有任何方法可以处理它,因此无法记录请求信息。

class ProjectResource(ModelResource):
    allowed_methods = ['get', 'put', 'post', 'delete']
    resource_name = 'project'
    queryset = Project.objects.all()
    validation = FormValidation(form_class=ProjectForm)
    always_return_data = True
    filtering = {
        'id': ALL,
        'slug': ALL,
        }

def dehydrate(self, bundle):
    import pdb;pdb.set_trace()   #--> get/post request hit this function
    logger.log('app.main','debug', 'Project info', bundle)
    bundle.data['name'] = cgi.escape(bundle.obj.name)
    return bundle

是否有任何函数可以覆盖 Tastepie.resource 模块中的 ModelResource ?这样对于所有请求,我首先获取捆绑数据,然后在处理之前将其传递给记录器。

【问题讨论】:

  • 当请求还没有被路由时,你不能在 WSGI 中间件级别上记录它吗?还是在Django middleware 级别?如果您只需要请求,并且您知道 API URL 的外观(例如.startswith('/api/')),那可能就足够了。

标签: python django tastypie


【解决方案1】:

有点晚了,但如果你能描述一下目的是什么,可能会更容易为你指明正确的方向。

您说您想记录请求信息,但在 dehydrate 方法中记录捆绑包并没有这样做,因为任何更改(例如在 POST 请求上添加主键)都已完成。

您最好直接在dispatch 方法中记录request.body

如果您确实想记录响应,也可以在 dispatch 方法中进行。

def dispatch(self, request_type, request, **kwargs):
  logger.info('Project info [request method]: %s' % request.method)
  logger.info('Project info [request]: %s' % request.body)
  response = super(ClassName, self).dispatch(request_type, request, **kwargs)
  logger.info('Project info [response status]: %d' % response.status_code)
  logger.info('Project info [response]: %s' % response.content)
  return response

【讨论】:

    猜你喜欢
    • 2016-10-10
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 2018-05-18
    相关资源
    最近更新 更多