使用中间件在数据库中保存 Django 2.2 404 请求

save Django2.2 404 request in database using middelware

我编写了一个自定义中间件来将所有请求保存在我的数据库中。 这是我的代码:

class TestMiddleware(MiddlewareMixin):
      def process_response(self, request, response):
           ....
           # save my request attr in database
           HttpRequestLog.objects.create(**params)
           ...

     def process_exception(self, request, exception):
           ....
           # save my request attr in database
           HttpRequestLog.objects.create(**params)
           ...

我有一个问题。 当用户调用错误 url apis 时,Django return 404 状态但是这段代码没有将任何内容保存到我的数据库中而且我没有任何错误!!!

               HttpRequestLog.objects.create(**params)

我的代码在 api returned 200 或 204 或 201 状态时有效。

404 通常是由 异常 完成的,不是 HTTP 响应。然后是 Django 框架将此异常转换为 HTTP 404 响应。

因此您可以“捕获”错误、记录响应并重新引发它:

class TestMiddleware(MiddlewareMixin):
    
    def process_response(self, request, response):
        …
        # save my request attr in database
        HttpRequestLog.objects.create(**params)

    def <b>process_exception</b>(self, request, exception):
        if isinstance(exception, Http404):
            # …
        return None

终于找到问题的解决方法了!

我在我的代码中使用了一个修订版中间件,我更改了我的中间件排序并将我的中间件放在修订版中间件之上,一切都成功了!