Ну, первый сеанс не зависит от django.contrib.auth, наоборот. При этом сеанс работы с анонимными пользователями.
Но все равно использование сеанса в этом случае кажется неправильным, поскольку сеансы были разработаны для сохранения состояния между запросами, а не во время запроса. Если вы хотите придерживаться шаблона декоратора, вы можете добавить пользовательский атрибут для запроса следующим образом:
request._is_user_premium = True
from your view:
is_premium = getattr(request, '_is_user_premium', False)
Но на вашем месте я бы реализовал это, заключив эту логику в некоторый класс разрешений:
class Permissions(object):
def __init__(self, request):
self.request = request
def has_premium_access():
#implement your logic here and return a boolean
return True
#view code
def myView(request):
perm = Permissions(request)
if perm.has_premium_access():
#do stuff
else:
#do other stuff
(Просто вычеркнув это из головы, могут возникнуть некоторые синтаксические ошибки;))
Но, как упоминал Дэвид Вулевер, также возможно реализовать такую логику в промежуточном программном обеспечении, просто убедитесь, что ваш пользовательский атрибут ленив, чтобы вы не обращались к базе данных при каждом запросе, если вам это нужно только атрибут только в некоторых видах.