Я использую django-nonrel для своего проекта в GAE. Мое требование состоит в том, чтобы в моем приложении одновременно только один пользователь мог входить в систему с заданным именем пользователя. Я попытался реализовать следующие предложенные подходы: Разрешить только один одновременный вход в систему для каждого пользователя в приложении django и Как я могу обнаружить несколько входов в веб-приложение Django из разных мест? Но проблема в том, что оба подхода работают на сервере разработки, но не работают на движке приложений Google. . Поэтому я переключился на django-signal в качестве альтернативного подхода. Я создал один сигнал post_login, который будет хранить имя пользователя для каждого пользователя, вошедшего в систему, в таблице Visitor в базе данных. При каждом выходе из системы другой сигнал post_logout будет удалять пользователя из этой таблицы. Часть кодов следующая:
#signals.py
post_login = django.dispatch.Signal(providing_args=['request', 'user'])
post_logout = django.dispatch.Signal(providing_args=['request', 'user'])
#models.py
def login_handler(sender,user, **kwargs):
try:
result=Visitor.objects.get(user=user)
print "You already have login with your name"
except:
visitor=Visitor()
visitor.user=user
visitor.save()
post_login.connect(login_handler)
def logout_handler(sender,user, **kwargs):
try:
result=Visitor.objects.get(user=user)
result.delete()
except:
return False
post_logout.connect(logout_handler)
#django.contrib.auth.__init.py__
def login(request):
:
user_logged_in.send(sender=user.__class__, request=request, user=user)
post_login.send(sender=None,request=request, user=user)
def logout(request):
:
user_logged_out.send(sender=user.__class__, request=request, user=user)
post_logout.send(sender=None,request=request, user=user)
Обратите внимание, что я получаю следующую ошибку при запуске моего приложения на движке приложений Google. Ошибка: ошибка сервера. Сервер обнаружил ошибку и не смог выполнить ваш запрос.
Также я не могу войти в административную часть приложения. Пожалуйста, помогите мне найти правильный подход к выполнению этого требования или дайте мне знать, где я делаю не так. Спасибо за терпение, что прочитали это огромное описание проблемы :-)