Подтвердить что ты не робот

Получить профиль пользователя в django

Привет, я новичок в python и django Мне нужно представление, которое получает текущий профиль пользователя. Я знаю, что я использую get_profile у пользователя, но я не знаю, как его использовать. Я прочитал документ django, и это не помогло мне. это то, что я нашел из документа:

from django.contrib.auth.models import User
profile=request.user.get_profile()
4b9b3361

Ответ 1

Документация Django говорит все, в частности, часть Хранение дополнительной информации о пользователях. Сначала вам нужно определить модель где-то в вашем models.py с полями для дополнительной информации пользователя:

models.py

from django.contrib.auth.models import User

class UserProfile(models.Model):
    # This field is required.
    user = models.OneToOneField(User)

    # Other fields here
    accepted_eula = models.BooleanField()
    favorite_animal = models.CharField(max_length=20, default="Dragons.")

Затем вам нужно указать, что эта модель (UserProfile) является профилем пользователя, установив AUTH_PROFILE_MODULE внутри вашего settings.py:

settings.py

...
AUTH_PROFILE_MODULE = 'accounts.UserProfile'
...

Вам нужно заменить accounts на имя вашего приложения. Наконец, вы хотите создавать профиль каждый раз, когда создается экземпляр User, регистрируя обработчик post_save, поэтому каждый раз, когда вы создаете пользователя Django, он также создает свой профиль:

models.py

from django.contrib.auth.models import User

class UserProfile(models.Model):
    # This field is required.
    user = models.OneToOneField(User)

    # Other fields here
    accepted_eula = models.BooleanField()
    favorite_animal = models.CharField(max_length=20, default="Dragons.")


def create_user_profile(sender, instance, created, **kwargs):
    if created:
        UserProfile.objects.create(user=instance)

post_save.connect(create_user_profile, sender=User)

Доступ к профилю

Чтобы получить доступ к текущему профилю пользователя в вашем представлении, просто используйте экземпляр User, предоставленный запросом, и вызовите get_profile:

def your_view(request):
    profile = request.user.get_profile()
    ...
    # Your code

Ответ 2

В основном модели пользователей django будут предоставлять доступ только для полей (имя, фамилия, адрес электронной почты, пароль, is_staff, is_active, last_login).

Однако, если мы хотим добавить какие-либо дополнительные поля в эту модель, скажем, нам нужно добавить новый столбец с именем dateofbirth для каждого пользователя, тогда нам нужно добавить столбец с именем DOB в модель User. Но это невозможно, поскольку мы не можем редактировать модели пользователей django.

Чтобы достичь этого,

1. У нас может быть отдельная новая таблица с идентификатором электронной почты и столбцом DOB, так что столбец в модели пользователя сопоставляется с столбцом в новой таблице. Но это создаст новый экземпляр db для каждого запроса db. Скажите, хотите ли вы найти DOB клиента,

  • Сначала нам нужно получить значение отображаемого идентификатора клиента из Таблица пользователей.
  • С приведенным выше значением, получите DOB из новой таблицы.

Во втором методе

Вместо использования модели пользователя django используйте свою собственную модель настройки со всеми необходимыми полями. Однако, если какое-либо обновление, связанное с безопасностью или некоторым усовершенствованием, сделанное для модели пользователя django, мы не можем использовать ее напрямую. Нам нужно сделать больше изменений кода на нашем конце (везде, где мы используем наши модели настройки.) Это будет немного больно для разработчика, чтобы определить код и внести изменения.

Чтобы преодолеть указанные выше проблемы, django представляет профиль django, который является очень простым и гибким. Преимущества

  • Обновление/усовершенствование модели пользователя можно применять без значительного изменения кода
  • Не нужно создавать новый экземпляр db для получения дополнительных значений.
  • Так как поле имеет onetoone отображения, удаление данных из одной таблицы также удалит другие.
  • Более безопасный, поскольку мы используем модели django (без SQL-инъекций)

Как использовать это:

В settings.py создайте переменную AUTH_PROFILE_MODULE = "appname.profiletable"

  • В models.py, создайте новую таблицу с необходимыми полями и убедитесь, что идентификатор в модели пользователя onetoone сопоставлен с новой таблицей.
  • создать сигнал, который вставляет строку в новую таблицу всякий раз, когда новая запись добавляется в пользовательскую модель.
  • Доступ к значению в новой таблице можно получить с помощью самого объекта User.

Скажем, мы создали новый пользовательский счетчик, который имеет DOB, email. Чтобы найти DOB клиента, используйте

a=User.objects.get(email='[email protected]')
a.get_profile().DOB will give the dateofbirth value from extrauser table.

Надеемся, что приведенные выше детали помогут вам понять профиль django. Поймите любую помощь дальше, дайте мне знать. Я использовал профиль django в своем проекте.

Ответ 3

Старый вопрос, но я подумал, что любой, кто видит его сегодня, может извлечь из этого пользу:

Django 1.5 добавляет возможность - легко - расширить модель User. Это может быть предпочтительнее, так как теперь у вас есть только один объект, а не два! Кажется более современным способом.

https://hurricanelabs.com/blog/django-user-models/

Ответ 4

Вам нужно указать, какой класс является вашим профилем, установив AUTH_PROFILE_MODULE = 'accounts.UserProfile' (например)

https://docs.djangoproject.com/en/1.4/topics/auth/