Last active
September 29, 2019 00:29
-
-
Save faelp22/3534584c38235fa0444fe370ff158456 to your computer and use it in GitHub Desktop.
Uso esse Middleware para bloquear todas as urls e libero só algumas, com isso evito ficar colocando o decorador @login_required.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import urllib.parse | |
from django.conf import settings | |
from django.urls import resolve, reverse | |
from django.shortcuts import redirect | |
''' | |
Isael Sousa <[email protected]> | |
v: 3 | |
Data: 27/09/2019 | |
Middleware responsavel por bloquear todas as url e liberar outras | |
settings.py exemplo | |
MIDDLEWARE = [ | |
... | |
'core.middleware.login.LoginRequiredMiddleware', | |
... | |
] | |
LOGIN_URL = 'login' | |
LOGOUT_URL = 'logout' | |
LOGIN_REDIRECT_URL = 'core:core_index' | |
LOGOUT_REDIRECT_URL = LOGIN_URL | |
# urls liberadas | |
LOGIN_IGNORE_URL = [ | |
'core:core_painel', | |
LOGIN_URL, | |
LOGOUT_URL, | |
] | |
''' | |
class LoginRequiredMiddleware: | |
def __init__(self, get_response): | |
self.get_response = get_response | |
def __call__(self, request): | |
response = self.get_response(request) | |
return response | |
def process_view(self, request, view_func, view_args, view_kwargs): | |
''' | |
Verifica se tem namespace para o resolve() | |
''' | |
def resolver_check(value): | |
if not value.namespace: | |
return value.url_name | |
return value.namespace + ':' + value.url_name | |
''' | |
Se já está logado deixo passar | |
''' | |
if request.user.is_authenticated(): | |
return None | |
''' | |
Se a url está liberada deixo passar | |
''' | |
if resolver_check(resolve(request.path_info)) in settings.LOGIN_IGNORE_URL: | |
return None | |
''' | |
Mando para tela de login | |
''' | |
url = reverse(settings.LOGIN_URL) + "?next=" + urllib.parse.quote(request.get_full_path()) | |
return redirect(url) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment