Ошибка запуска промежуточного программного обеспечения дважды в Django - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть какое-то промежуточное программное обеспечение, которое я создал для приложения, которое проверяет несколько критериев в отношении вошедшего в систему пользователя.

Если оно не выполнит какой-либо из них, оно выдаст сообщение об ошибке, сообщив пользователю.

Проблема в том, что ошибка отображается дважды в верхней части страницы.

Промежуточное программное обеспечение выглядит следующим образом:

class RegistrationMiddleware(object):

    def __init__(self, get_response):
        self.get_response = get_response
        print("In init of middleware")

    def __call__(self, request):
        # Code to be executed for each request before
        # the view (and later middleware) are called.
        print("Pre-view middle")
        response = self.get_response(request)
        # Code to be executed for each request/response after
        # the view is called.
        print("Post-view middle")

        ...logic stuff....

        if invalid_entries:
            for problem_reg in invalid_entries:
                messages.error(
                    request, format_html(
                        """
                        Please either
                        remove or change this registration.
                        """ 
                        )
                    )
        print('end of view reutrning response')
        return response

Ошибка отображается на странице дважды.

Моя консоль показывает что-то вроде этого:

Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
In init of middleware
Pre-view middle
this is a test of the get_user method
Post-view middle
end of view reutrning response
[25/Feb/2019 09:48:46] "GET /registrations/ HTTP/1.1" 200 21860
[25/Feb/2019 09:48:46] "GET /static/styles.css HTTP/1.1" 200 7082
[25/Feb/2019 09:48:46] "GET /static/registrations/style.css HTTP/1.1" 200 2282
[25/Feb/2019 09:48:46] "GET /static/registrations/index.js HTTP/1.1" 200 1885
[25/Feb/2019 09:48:46] "GET /static/all.min.js HTTP/1.1" 200 3738182
Pre-view middle
Post-view middle
this is a test of the get_user method
end of view reutrning response
Not Found: /favicon.ico
[25/Feb/2019 09:48:47] "GET /favicon.ico HTTP/1.1" 404 2586

Я не уверен, что промежуточное ПО на 100% лучшее решение для проверки на наличие ошибок, подобных этой, но мне нужно проверить этот же биткод по существу для каждого представления в приложении, поэтому кажется, что это правильный способ справиться с этим.

Я просто пытаюсь сделать так, чтобы он просто запускался один раз - до или после того, как представление отрисовывается нормально, ноМне нужно только, чтобы показать одну ошибку.

    {% for message in messages %}
        <div class="alert alert-{{ message.tags }} alert-dismissible mt-4" role="alert">
            <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                <span aria-hidden="true">&times;</span>
            </button>
            {{ message }}
        </div>
    {% endfor %}

1 Ответ

0 голосов
/ 27 февраля 2019

Наличие логики после: response = self.get_response(request) вызывало проблему и вызывало непоследовательное поведение - потому что предупреждение обрабатывалось после представления, что, в свою очередь, приводило к загрузке ошибки в next обновлять, промывать и повторять, и большую часть времени ошибка дублировалась.

Перемещение ее на до при обработке представления исправило проблему и помогло сделать ее согласованной.

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