У меня есть приложение Django, которое получает его полностью из внешнего источника (запрашивается через HTTP). То есть у меня нет возможности для локальной базы данных. Данные сеанса хранятся в кеше (на моем сервере разработки я использую базу данных SQLite, поэтому это не источник ошибок). Я использую кровоточащий край Django 1.1svn.
Введите проблему: я хочу использовать собственную систему аутентификации Django для пользователей.
Кажется довольно простым написать мой собственный Authentication Backend, но всегда просто при условии, что у вас есть локальная база данных, где можно сохранить пользователей. Без базы данных моя главная проблема - настойчивость.
Я попробовал это со следующим (предположим, что datasource.get()
- это функция, которая возвращает какой-то dict):
class ModelBackend (object):
"""Login backend."""
def authenticate (self, username=None, password=None):
"""Check, if a given user/password combination is valid"""
data = datasource.get ('login', username, password)
if data and data['ok']:
return MyUser (username=username)
else:
raise TypeError
return None
def get_user (self, username):
"""get data about a specific user"""
try:
data = datasource.get ('userdata', username)
if data and data['ok']:
return data.user
except:
pass
return None
class MyUser (User):
"""Django user who isn't saved in DB"""
def save (self):
return None
Но намеренно отсутствующий метод save()
на MyUser, похоже, нарушает хранение сеанса входа в систему.
Как выглядеть MyUser
без локальной базы данных?