Форум сайта python.su
Посоветуйте примеры\уроки где можно разобраться с вопросом:
На сайте буду регистрироваться пользователи через джанговскую систему встроенную. Некоторые данные пользователей которые они будут вводит через форму будут иногда добавляться\ изменяться. То есть для каждого пользователя будет просто строка, куда будут вноситься некоторые строчные данные(вообще то словарь питон с данными). Я себе представляю туманно, что это будут связанные две таблицы - джанговская таблица с юзерами из админки и таблица с данными созданная. Вопрос для меня как обеспечить однозначность соответствия между строками таблицы, что бы умышленно, или в следствии какого то сбоя один юзер не стер или не изменил данные другого.
Как вообще в джанго реализуется идея хранения данных пользователей?
Дайте ченибудь почитать (не офф доки - там про это почти ничего)
Офлайн
Стандартное решение - определяйте модель с профилем пользователя и ссылкой на django.contrib.auth.models.User как OneToOne
Офлайн
Есть какие то типичные уязвимости в этом решении в плане защиты информации?
Вот например чувак залогинился по имени своей почты, его строка в таблице django.contrib.auth.models.User позволяет ему записывать и читать из соответствующей(его личной) строки из таблицы данных. Он может как то поделать запрос что бы записать что то в чужую строку? Дополнительная защита какая то здесь не требуется?
Офлайн
Вы, видимо, не понимаете, о чем говорите. Вы доверяете стандартному джанговскому механизму авторизации? Если нет, читайте доки по джанге и ищите уязвимости, если да, то им и пользуйтесь. А на вопрос, как расширить возможности модели пользователя, я Вам ответил. Отвечу более конкретно, если Вы конкретизируете свои чаяния.
Отредактировано FishHook (Янв. 11, 2013 15:14:28)
Офлайн
спасибо. в процессе разработки конкретезирую
Офлайн
конкретизирую. какой самый правильный способ расширить дб user\создать профиль юзера?
здесь http://habrahabr.ru/post/118468/ товарищ указывает на проблему в django-profiles(https://bitbucket.org/ubernostrum/django-profiles), когда при использовании наследования к бд посылаются лишние запросы, нагружая сервер. он рекомендует django-primate(https://github.com/aino/django-primate). там вроде и настраивать меньше приходится. но похоже на то что то и другое решение уже не развивается пару лет(см. ссылки)
что посоветуете?
Офлайн
http://python.su/forum/post/102071/
…для профайлов есть стандартные решенияТольо для 1.5 ссылка изменилась:
https://docs.djangoproject.com/en/1.4/topics/auth/#storing-additional-information-about-users
Но в 1.5 изменится
https://docs.djangoproject.com/en/dev/topics/auth/#auth-custom-user
Отредактировано reclosedev (Янв. 21, 2013 18:53:23)
Офлайн
Сделал все как в https://docs.djangoproject.com/en/1.4/topics/auth/#storing-additional-information-about-users
Но при попытке во вьюхе добраться до бд профиля (profile = request.user.get_profile()) получаю:
UserProfile matching query does not exist.
Общая ответ в гугле на этот вопрос такой - это потому что get_profile не создает профиль, а что бы он создался нужно добавить в модель некоторый код (там же по ссылке). Ну я сразу и добавил.
Аналогичные посты на гитхабе не помогли.
Напишите пожалуйста в 3 строчки, как должна выглядеть во view функция которая добавляет данные в поле профиля залогининого юзера
Офлайн
kvadratКакой? С post_save.connect(…)?
Ну я сразу и добавил.
Офлайн
да
там сказано
The method get_profile() does not create a profile if one does not exist. You need to register a handler for the User model's django.db.models.signals.post_save signal and, in the handler, if created is True, create the associated user profile:
# in models.py
from django.contrib.auth.models import User
from django.db.models.signals import post_save
# definition of UserProfile from above
# ...
def create_user_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
post_save.connect(create_user_profile, sender=User)
reclosedevно разве этот кусок не предназначен для того что бы создать профиль?
Скорее всего у уже созданных User нет профиля.
Офлайн