Skip to content

Instantly share code, notes, and snippets.

@kr6k3n
Last active December 29, 2020 16:08
Show Gist options
  • Save kr6k3n/9c621517cb6f0891355e0877389dc59f to your computer and use it in GitHub Desktop.
Save kr6k3n/9c621517cb6f0891355e0877389dc59f to your computer and use it in GitHub Desktop.
Useful wrappers for django views
def login_required(function):
"""filter views"""
@wraps(function)
def wrapper(*args, **kwargs):
request = args[0]
user = None
if not request.user.is_authenticated:
if request.method == 'POST':
try:
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
print(user)
if not user is None and not request.user.is_authenticated:
login(request,user)
return HttpResponseRedirect(request.path)
except:
return HttpResponseBadRequest()
else:
return render(request, "signin.html")
if "logout" in request.GET:
logout_user(request)
return render(request, "signin.html")
return function(*args, **kwargs)
return wrapper
def parametrized(dec):
def layer(*args, **kwargs):
def repl(f):
return dec(f, *args, **kwargs)
return repl
return layer
@parametrized
def restrict(function, *groups):
"""restrict views to specific user groups, use after login_required wrapper"""
@wraps(function)
def wrapper(*args, **kwargs):
request = args[0]
user_groups = map(lambda group: group.name,request.user.groups.all())
for group in groups:
if group in user_groups:
return function(*args, **kwargs)
return HttpResponseNotAllowed()
return wrapper
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment