Форум сайта python.su
Прошу помочь с организацией перехода пользователя в свой профиль.
После активации django-registration бросает в accounts/profile. Я определил myapp1/profile/идентикатор_user-а, т.к. таблица Profile хранится в моем приложении.
1. Как можно определить id user-а и настроить автоматический переброс accounts/profile -> myapp1/profile/идентикатор_user-а?
2. как ограничить доступ остальных пользователей к myapp1/profile/идентикатор_user-а, кроме user-а с правильным идентификатором?
Офлайн
1. LOGIN_REDIRECT_URL = “/myapp1/profile”
или даже
from django.core.urlresolvers import reverse_lazy
reverse_lazy('profiles')
2. Правильный это какой ?
Я так понял там самописная вюха так и делаейте в ней что хотите.
Или в шаблонах
{% if request.user.pk == profile.user.pk %} you in {% else %} not accespted {% ebdif %}
Офлайн
помогите разобраться с вьюхой - ну не идет, чего-то недопонимаю …
нужно сделать выборку из стандартных таблиц модуля авторизации: auth_user (я так понимаю что это модель User) и расширенного профиля myapp1_exuser_profile (с моделью ExUserProfile) всех данных для пользователя который залогинился. Для пользователя, который никак не залогинлся должно вводится предложение залогинится.
Моя попытка:
class UserProfileFormView(generic.DetailView):
def get_context_data(self, *args, **kwargs):
context = super(UserProfileFormView, self).get_context_data(*args, **kwargs)
context['myapp1_exuser_profile'] = ExUserProfile.objects.get( id = request.user.pk )
context['auth_user'] = User.objects.get( user_id = request.user.pk )
return context
Отредактировано django314 (Апрель 23, 2014 23:25:05)
Офлайн
django314
покажите модель профиля. У вас же там скорей всего фк на модель пользователя
Я бы просто переписал шаблон профиля что-бы он обращался где нужно к данным с модели пользователя
from django.views.generic import TemplateView from braces.views import LoginRequiredMixin class UserProfileFormView(LoginRequiredMixin, TemplateView): #optional login_url = "/signup/" redirect_field_name = "hollaback" raise_exception = True
Офлайн
Singularity
django314покажите модель профиля. У вас же там скорей всего фк на модель пользователя
class ExUserProfile(models.Model): user = models.ForeignKey(User, unique=True) middle_name = models.CharField(u'Ваше отчество:',max_length=25) # другие поля def __unicode__(self): return self.user
context['myapp1_exuser_profile'] = ExUserProfile.objects.get( user_id = self.request.user.pk ) context['auth_user'] = User.objects.get( id = self.request.user.pk )
Офлайн
django314
зачем еще auth_user ? ну может быть что так удобней
p = ExUserProfile.objects.get(pk=1)
print p.user.email
https://docs.djangoproject.com/en/dev/ref/models/fields/#ref-onetoone
https://docs.djangoproject.com/en/dev/ref/models/fields/#ref-onetoone
Добавить данные пользователю можно не одним способом
http://stackoverflow.com/questions/21779226/abstractuser-django-full-example
Офлайн
Спасибо, буду разбираться.
Singularity
django314зачем еще auth_user ?
class ExUserProfile(models.Model): user = models.ForeignKey(User, unique=True) middle_name = models.CharField(u'Отчество: ',max_length=25) # другие поля def __unicode__(self): return self.user from registration.signals import user_registered def user_registered_callback(sender, user, request, **kwargs): profile = ExUserProfile(user = user) profile.middle_name = request.POST['middle_name'] # другие поля profile.save() user_registered.connect(user_registered_callback) from registration.forms import RegistrationForm from django import forms class ExUserRegistrationForm(RegistrationForm): username = forms.CharField(label = u'Логин:') first_name = forms.CharField(label = u'Имя:') middle_name = forms.CharField(label = u'Отчество:') last_name = forms.CharField(label = u'Фамилия:') # другие
mysql> show fields from auth_user;
+--------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| password | varchar(128) | NO | | NULL | |
| last_login | datetime | NO | | NULL | |
| is_superuser | tinyint(1) | NO | | NULL | |
| username | varchar(30) | NO | UNI | NULL | |
| first_name | varchar(30) | NO | | NULL | |
| last_name | varchar(30) | NO | | NULL | |
| email | varchar(75) | NO | | NULL | |
| is_staff | tinyint(1) | NO | | NULL | |
| is_active | tinyint(1) | NO | | NULL | |
| date_joined | datetime | NO | | NULL | |
+--------------+--------------+------+-----+---------+----------------+
mysql> show fields from myapp1_exuserprofile;
+-------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user_id | int(11) | NO | UNI | NULL | |
| middle_name | varchar(100) | NO | | NULL | |
...
Отредактировано django314 (Апрель 24, 2014 00:31:13)
Офлайн
django314
я про то зачем он в контексте шаблона…
Офлайн
Singularity
django314я про то зачем он в контексте шаблона…
Отредактировано django314 (Апрель 24, 2014 00:48:24)
Офлайн
Собственно заработало предствление на базе TemplateView, вот так
def get_context_data(self, *args, **kwargs): context = super(ExUserProfileFormView, self).get_context_data(*args, **kwargs) if self.request.user.is_authenticated(): context['exuserprofile'] = ... .... else: ... return context
class ExUserProfileFormUpdate(generic.UpdateView): model = ExUserProfile fields = '__all__'
Отредактировано django314 (Апрель 24, 2014 12:31:49)
Офлайн