Here\'s my view. Basically, it returns different Responses based on whether it\'s logged in or not.
@check_login()
def home(request):
if is_logged_in(req
Here is a decorator I wrote to check if the user is in a certain group. It shows a bit more.
https://github.com/mzupan/django-decorators/blob/master/auth.py
You use it like
@group_required(["group1", "group2"])
def show_index(request):
view_code_here
The user can be in either group1 or group2 if they are not they get a 404 page
A plain decorator is simply a function that takes a function or class and returns something else (usually the same type, but this is not required). A parametrized decorator is a function that returns a decorator.
So, with that in mind we create a closure and return it:
def check_login(func):
def inner(request, *args, **kwargs):
if request.META['username'] == 'blah':
login(request, user) # I have no idea where user comes from
func(request, *args, **kwargs)
return inner
Use only @check_login
instead of check_login()
- otherwise your decorator has to return a decorate as you are doing home = check_login()(home)
Here's an example decorator:
def check_login(method):
@functools.wraps(method)
def wrapper(request, *args, **kwargs):
if request.META['username'] == "blah"
login(request, user) # where does user come from?!
return method(request, *args, **kwargs)
return wrapper
This decorator will call execute your login function if the username field is set to "blah" and then call the original method.