我在 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
我是一名优秀的程序员,十分优秀!