Skip to content

Instantly share code, notes, and snippets.

@adamchainz
Created April 3, 2023 19:46
Show Gist options
  • Save adamchainz/1a864407007cd420ac5bf6680b80cdb3 to your computer and use it in GitHub Desktop.
Save adamchainz/1a864407007cd420ac5bf6680b80cdb3 to your computer and use it in GitHub Desktop.
login required middleware
class LoginRequiredMiddleware:
def __init__(self, get_response: GetResponse) -> None:
self.get_response = get_response
def __call__(self, request: HttpRequest) -> HttpResponse:
return self.get_response(request)
def process_view(
self,
request: HttpRequest,
view_func: ViewFunc,
view_args: tuple[object, ...],
view_kwargs: dict[str, object],
) -> HttpResponse | None:
is_public = getattr(view_func, "is_public", False)
if not is_public and not request.user.is_authenticated:
return redirect_to_login(request.get_full_path())
return None
def public(view: ViewFunc) -> ViewFunc:
@wraps(view)
def wrapper(*args: object, **kwargs: object) -> HttpResponse:
return view(*args, **kwargs)
wrapper.is_public = True # type: ignore[attr-defined]
return cast(ViewFunc, wrapper)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment