Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 25, 2014 23:08:02

bmco@mail.ru
Зарегистрирован: 2014-03-11
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Новая модель User + регистрация

FishHook
Ок, объясняю. Вам нужно два вида пользователей, которые будут обладать разными правами (если вы хотите использовать систему джанговских прав) и вы хотите иметь возможность в любое время выяснить, что же за пользователь у Вас сейчас послал запрос.Вы заходите в админку, и видите там Группы. Добавляете две группы: продавцы, Покупатели.Теперь каждый из ваших пользователей может быть членом одной из этих групп (или обеих сразу).

Спасибо! Пытаюсь разобраться и реализовать. Но возникают вопросы!

1) Влияет ли предложенный Вами механизм на суперюзера (администратора) или эти вещи никак не взаимосвязаны? Ну то есть, например я создаю две новые группы Покупатели и Продавцы и назначаю им определенные права (разрешения), тогда не следует ли из этого, что мне надо отдельно создавать третью группу Администраторы со своим набором прав? Правильно ли я понимаю, что в коробочном варианте получается, что по умолчанию существует 2 группы пользователей - Суперюзер и Обычные пользователи, когда я добавляю 2 новые группы, то по сути образуются 4 группы - Суперюзер, Обычные, Продавцы и Покупатели или что-то я не так понимаю?

2) И подскажите, пожалуйста, как сделать так, чтобы в админке было видно к какой группе принадлежит пользователь?

3) Такое ощущение, что Ваш вариант не работает на собственной новой модели пользователя NewUser

In : user
Out: <NewUser: fff@mail.ru>

In : user.groups.add(1)
————————————————————-
AttributeError Traceback (most rec
<ipython-input-19-48984d48f1d5> in <module>()
—-> 1 user.groups.add(1)

AttributeError: ‘NewUser’ object has no attribute ‘groups’

Нужно еще добавлять поле в модель пользователя, я думал что группы там наследуются по умолчанию?

4) Посмотрите, пожалуйста, сюда http://www.odmin4eg.ru/2011/django-registration-primer/ Я так понимаю, что предлагают здесь - это может быть одно из решений моей задачи. Тогда чем отличается Ваш вариант от предложенного? Зачем человек нагородил такую кучу кода?

Может все-таки есть вариант без Групп. С ними все как-то выглядит запутанно, ИМХО!

Отредактировано bmco@mail.ru (Июнь 26, 2014 00:35:45)

Офлайн

#2 Июнь 26, 2014 05:56:02

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Новая модель User + регистрация

1.
>>>2 группы пользователей - Суперюзер и Обычные пользователи
Не смешивайте в кучу коней и людей. Посмотрите лучше в код модели User и увидите, что у каждого юзера есть BooleanField is_superuser, это никакая не группа, это просто галочка - да/нет.
2.
Они там и так есть. В Вашей собственной модели их нет. ‘NewUser’ object has no attribute ‘groups’.
Чьи проблемы?
3.
>>> не работает на собственной новой модели
Ну откуда мне знать, что там в Вашей самодельной модели? Я говорил о функционале компонентов джанго. Если Вы этот функционал переписываете по своему разумению, то понятно, что стандартные фичи работать не будут, если Вы их не реализуете самостоятельно.
4.
Человек, нагородивший кучу кода знает, что он делает и зачем ему это нужно. Мне кажется, Вы изобретаете велосипед. Зачем Вам понадобилось городить “собственную новую модель пользователя NewUser”? Чего Вам не хватает в модели User, которую предлагает джанга?



Отредактировано FishHook (Июнь 26, 2014 05:57:20)

Офлайн

#3 Июнь 26, 2014 10:15:58

bmco@mail.ru
Зарегистрирован: 2014-03-11
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Новая модель User + регистрация

FishHook
3.>>> не работает на собственной новой моделиНу откуда мне знать, что там в Вашей самодельной модели? Я говорил о функционале компонентов джанго. Если Вы этот функционал переписываете по своему разумению, то понятно, что стандартные фичи работать не будут, если Вы их не реализуете самостоятельно. 4.Человек, нагородивший кучу кода знает, что он делает и зачем ему это нужно. Мне кажется, Вы изобретаете велосипед. Зачем Вам понадобилось городить “собственную новую модель пользователя NewUser”? Чего Вам не хватает в модели User, которую предлагает джанга?

Я создал новую модель, чтобы избавиться от лишних полей. Для авторизации оставил только 2 поля - имейл и пароль.

accounts.models
from django.db import models
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
# Create your models here.
class FexUserManager(BaseUserManager):
def create_user(self, email, password = None, **kwargs):
if not email:
raise ValueError(_('Users must have an email address'))
user = self.model(
email = FexUserManager.normalize_email(email),
**kwargs
)
user.set_password(password)
user.save(using = self._db)
return user
def create_superuser(self, email, password, **kwargs):
user = self.create_user(email,
password = password,
**kwargs
)
user.is_admin = True
user.save(using = self._db)
return user
class FexUser(AbstractBaseUser):
email = models.EmailField(
max_length = 80,
unique = True,
verbose_name = _('email'),
help_text = _('Example: email@example.com')
)
is_active = models.BooleanField(
default = True,
verbose_name = _('is active')
)
is_admin = models.BooleanField(
default = False,
verbose_name = _('is admin')
)
USERNAME_FIELD = 'email'
objects = FexUserManager()
def get_short_name(self):
return self.email
def __unicode__(self):
return self.email
def has_perm(self, perm, obj=None):
return True
def has_module_perms(self, app_label):
return True
@property
def is_staff(self):
return self.is_admin
class Meta:
verbose_name = _('User')
verbose_name_plural = _('Users')

Правильно ли я Вас понял, что в мою новую модель необходимо добавить атрибут groups? И что нужно, чтобы Суперюзер не входил ни в одну из групп, то есть чтобы при создании Суперюзера система не спрашивала к какой я его группе хочу прикрепить?

Офлайн

#4 Июнь 26, 2014 10:26:14

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Новая модель User + регистрация

bmco@mail.ru
Правильно ли я Вас понял, что в мою новую модель необходимо добавить атрибут groups?
Нет, не правильно. Я в третий раз повторяю: посмотрите в код модели User. От чего она наследуется.
Если уж очень хочется городить огород, хотя я так и не понял зачем.

AbstractUser(AbstractBaseUser, PermissionsMixin):



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version