У меня есть приложение Django, которое получает свои данные полностью из внешнего источника (запрашивается через HTTP). То есть у меня нет возможности для локальной базы данных. Данные сеанса хранятся в кеше (на моем сервере разработки я использую базу данных SQLite, так что это не источник ошибок). Я использую кровоточащий Django 1.1svn.
Введите проблему: я хочу использовать собственную систему аутентификации Django для пользователей.
Кажется, довольно просто написать свой собственный Аутентификационный Бэкэнд, но всегда только при условии, что у вас есть локальная база данных для сохранения пользователей. Без базы данных моя главная проблема - постоянство.
Я попробовал это со следующим (предположим, что 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
без локальной базы данных?