Skip to content

Instantly share code, notes, and snippets.

@dstufft
Created September 15, 2011 21:22
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dstufft/1220512 to your computer and use it in GitHub Desktop.
Save dstufft/1220512 to your computer and use it in GitHub Desktop.
Mixins vs Decorators for Django
from functools import wraps
class ViewDecorator(object):
def __init__(self, decorator_class):
self.decorator_class = decorator_class
def __call__(self, *args, **kwargs):
# Pretend that there is a generic decorator wrapper here
pass
login_required = ViewDecorator(LoginRequired)
from django.conf import settings
from django.http import HttpResponseRedirect
class LoginRequired(object):
def dispatch(self, request, *args, **kwargs):
if self.check_logged_in(request.user):
return super(LoginRequired, self).dispatch(request, *args, **kwargs)
else:
return self.not_logged_in(self):
def check_logged_in(self, user):
return user.is_authenticated()
def not_logged_in(self):
return HttpResponseRedirect(settings.LOGIN_URL)
@login_required
def function_based_view(self, request):
return HttpResponse("Testing")
class ClassBasedView(LoginRequired, TemplateView):
template_name = "secret.html"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment