如何在Django中按请求进行"Lazy-write"登录?

pay*_*yne 1 django

使用Django,我需要做一些涉及数据库写入的每请求日志记录.

我理解Django process_request()process_response()中间件钩子,但据我所知,这些钩子在关键路径(按设计)中呈现网页响应.

我不希望我的请求后数据库写操作阻止页面的响应时间.

是否有一个简单的Django设计模式,让我做一个"懒惰的日志写入",我可以使用请求挂钩在请求处理期间收集信息,但任何后续操作和实际的日志写操作不会发生在响应写入用户?

我目前正在使用WSGI,但更喜欢最通用的解决方案.

Ber*_*ant 5

Django实现了一个request_finished-signal,它在响应处理完成后被触发,但是缺点是,它不允许你访问当前request对象,这使得它对于记录来说不是很有用...最新的钩子位置进入django的响应处理很可能是在HttpResponse类本身.你可以,例如.临时存储数据request.session并将其写入close()方法中的数据库.

但我想还有其他你应该考虑的替代方案:你可以使用像Celery这样的东西来异步处理你的日志记录任务.此外,还有像MongoDB这样的非SQL数据库,可以为您提供方便和高效的日志记录功能,例如.您不必等到更改真正提交到数据库,这可以为您提供巨大的性能优势.