Задать вопрос
Ответы пользователя по тегу Django
  • Как сделать так, чтобы значение request.user кастомной User-модели сохранялось между страницами?

    @nevsherst Автор вопроса
    Проблема заключалась в том, что бэкенд аутентификации является классом, который реализует два обязательных метода: get_user и authenticate (первый из которых я не прописал). Лично в моем коде я подправил методы модели MyUserManager и, собственно, добавил необходимый метод в Backend:
    /project/user/models.py
    class MyUserManager(UserManager):
    	def create(self, **kwargs):
    		user = super().create(**kwargs)
    		user.set_password(user.password)
    		user.save()
    		return user
    	def get(self, **kwargs):
    		if kwargs.get('email', None) is not None:
    			return super().get(email=kwargs['email'])
    		elif kwargs.get('id', None) is not None:
    			return super().get(id=kwargs['id'])
    		return None

    /project/admission/backend.py
    class Backend:
    	def authenticate(self, request=None, username=None, email=None, password=None):
    		if None in [email, password]:
    			return None
    		scope = locals()	
    		data = {i: eval(i, scope) for i in ['username', 'email', 'password'] if eval(i, scope) is not None}
    		try:
    			password = data.pop('password')
    			user = User.objects.get(**data)
    			if not user.check_password(password):
    				return None
    		except:
    			return None
    		return user
    	def get_user(self, iden):
    		return User.objects.get(id=iden)
    Ответ написан
    Комментировать