How do I write a decorator for my Django/Python view?

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(request): 
        return x
    else:
        return y

Here's my decorator code. I just want to check if the request has headers, and if so, log him in.

#decorator to log the user in if there are headers
def check_login():
    def check_dec(func):
        if request.META['username'] == "blah":
            login(request, user)

    return check_dec

The problem is..I don't know how to write a proper decorator in this case!!! What are the arguments? What are the functions? How?

Answers


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.


Need Your Help

Django forms: reasons to use them?

python django django-forms

Are there any real reason to use builtin forms in django?

Error when trying to use mexopencv in matlab

matlab opencv mex

I am trying to use mexopencv on my system which has: