Есть ли способ добавить промежуточное программное обеспечение для определенного маршрута URL в django?

#python #django #middleware

#python #django #промежуточное программное обеспечение

Вопрос:

Допустим, у меня есть несколько URL-адресов:

 urlpatterns = [
    path('', Home.as_view()),
    path('games/', include('games.urls', namespace='games')),
]
  

Есть ли способ заставить данное промежуточное программное обеспечение запускаться только при доступе к URL games -адресам? Например, для проверки подлинности или предварительной выборки некоторых данных, которые будут полезны для всех представлений в games приложении.

Ответ №1:

Вы можете проверить, принадлежит ли текущий запрос games пространству имен, используя ResolverMatch :

 def simple_middleware(get_response):
    # One-time configuration and initialization.

    def middleware(request):
        # Code to be executed for each request before
        # the view (and later middleware) are called.

        if 'games' in request.resolver_match.namespaces:
            # Some additional logic here
            pass

        response = get_response(request)

        # Code to be executed for each request/response after
        # the view is called.

        return response

    return middleware
  

Комментарии:

1. Привет, я нашел это полезным, но просто хотел отметить, что я нашел этот запрос.resolver_match недоступен до тех пор, пока не будет выполнен вызов get_response