user972014
user972014

Reputation: 3856

How to create a function-based middleware with process_view() in Django?

I'm implementing a new middleware using a standard implementation:

def my_middleware(get_response):
    def middleware(request):
        return get_response(request)
    return middleware

I want to get the view_args. I can change to a class-based middleware and implement the method

process_view(request, view_func, view_args, view_kwargs)

Is there any other way to get these view_args, view_kwargs in my middleware without changing to class-based middleware?

Upvotes: 1

Views: 995

Answers (2)

*process_view() should return None or a HttpResponse object otherwise there is error.

The function with process_view():

def process_view(request, view_func, view_args, view_kwargs):
    # Do something

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.

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

        return response

    middleware.process_view = process_view # Here

    return middleware

The class with process_view():

class SimpleMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response
        # One-time configuration and initialization.

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

        response = self.get_response(request)

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

        return response

    def process_view(self, request, view_func, view_args, view_kwargs):
        # Do something

Upvotes: 0

JPG
JPG

Reputation: 88499

set process_view(...) as an attribute of middleware(...) function as

def process_view(request, view_func, view_args, view_kwargs):
    """
    do something
    """


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.

        response = get_response(request)

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

        return response

    middleware.process_view = process_view

    return middleware

Upvotes: 2

Related Questions