Как я могу напечатать 404 запроса в Django? - PullRequest
1 голос
/ 01 мая 2020

У меня есть приложение Django, и оно отлично работает, я хочу получить весь запрос 404 для печати в терминале. например: 127.0.0.1:8000/admin/hello # result is 404 because I haven't this URL Я хочу получить /admin/hello, потому что у меня нет этого URL. Как я могу это сделать?

Я имею в виду: пользователь вводит 127.0.0.1:8000/admin/hello, затем терминал устанавливает a = /admin/hello и печатает (a)

Ответы [ 2 ]

2 голосов
/ 01 мая 2020

Вы можете создать промежуточное программное обеспечение для этого. Вот пример, основанный на BrokenLinkEmailMiddleware реализации:

from django.utils.deprecation import MiddlewareMixin

class BrokenLinkMiddleware(MiddlewareMixin):

    def process_response(self, request, response):
        if response.status_code == 404 and not settings.DEBUG:  # for production
            domain = request.get_host()
            path = request.get_full_path()
            referer = request.META.get('HTTP_REFERER', '')

            if not self.is_ignorable_request(request, path, domain, referer):
                ua = request.META.get('HTTP_USER_AGENT', '<none>')
                ip = request.META.get('REMOTE_ADDR', '<none>')
                # Store response in Database
                YourModel.objects.create(domain=domain, path=path, ua=ua, ip=ip, referer=referer)
        return response

И добавьте в него свои настройки:

MIDDLEWARE = [
   ...
   'path.to.BrokenLinkMiddleware',
]
1 голос
/ 01 мая 2020

Спасибо @ruddra за ответ.

Объясняю просто:

Я добавляю в views.py:

from django.utils.deprecation import MiddlewareMixin


class BrokenLinkMiddleware(MiddlewareMixin):
    def process_response(self, request, response):
        if response.status_code == 404  :  # for production
            domain = request.get_host()
            path = request.get_full_path()
            print('path : ',path)
            # print('domain : ',domain)

            ua = request.META.get('HTTP_USER_AGENT', '<none>')
            ip = request.META.get('REMOTE_ADDR', '<none>')
            # Store response in Database
            # print('ua:',ua)
            # print('ip:',ip)
        return response

Затем добавляю в файл settings.py СРЕДНЕЕ ОБЕСПЕЧЕНИЕ :

MIDDLEWARE = [
...
'MynameAPP.views.BrokenLinkMiddleware'  
...
]

и фини sh работают. еще раз спасибо @ ruddra.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...