python - 如何在 tastypie django 中记录所有请求

标签 python django tastypie

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

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

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

最佳答案

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

您说您想记录请求信息,但将包记录在 dehydrate 中方法不会执行此操作,因为任何更改(例如在 POST 上添加主键)请求已经完成。

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

如果您确实想记录响应,您也可以在 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

关于python - 如何在 tastypie django 中记录所有请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40109368/

相关文章:

javascript - 将多个 JavaScript 文件组合并压缩到 Django 项目中的单个文件中

django - 需要在 pytest 工厂中覆盖 django auto_now_add

python - 什么 Python 框架用于没有前端的 REST/JSON Web 服务?

python - Tastypie - 嵌套资源被更新而不是在 POST 上创建

django-admin:对象保存后如何重定向到另一个URL?

python - 使用 django 框架在 python 中进行身份验证的 Web 和 native 移动应用程序使用的 RESTFUL Web 服务

python - 在 Spyder 2.1 上安装/导入 sklearn 模块? (Ubuntu)

Python CSV : IndexError: List Index out of range

python - 使用逗号作为换行符读取 CSV

python - eBay SDK 无法识别沙盒用户帐户