@Ayaks77

Просмотр профиля пользователя Django?

Доброго времени суток! Не могу понять как реализовать просмотр чужого профиля. Есть немного измененная модель юзера, форма входа:
class LoginFormView(FormView):
form_class = AuthenticationForm
template_name = "login.html"
success_url = "/"

def form_valid(self, form):
    self.user = form.get_user()
    login(self.request, self.user)
    return super(LoginFormView, self).form_valid(form)

def form_invalid(self, form):
    return super(LoginFormView, self).form_invalid(form)


сам профиль:
class ProfileView(LoginRequiredMixin, DetailView):
model = User
template_name = 'profile.html'
pk_url_kwarg = 'user_pk'

и форма его редактирования:
class UpdateProfileView(LoginRequiredMixin, UpdateView):
form_class = UpdateForm
model = User
template_name = 'profile_update.html'
pk_url_kwarg = 'user_pk'

def get(self, request, *args, **kwargs):
    user = User.objects.get(pk=self.kwargs['user_pk'])
    if user != request.user:
        return HttpResponseForbidden()
    else:
        return super(UpdateProfileView, self).get(request, *args, **kwargs)

def get_success_url(self):
    return reverse('profile_update', kwargs={'user_pk': self.kwargs['user_pk']})

Суть в том что если я в адресной строке изменяю id юзера при просмотре профиля, происходит перелогин под соответствующий id. И если во вьюхе редактирования в методе get я вставил костыльную проверку на конкретного пользователя, чтоб в ином случае ограничивал доступ, то просто при просмотре не могу понять как поступить.
url:
url(r'^profile/(?P<user_pk>\d+)/$', ProfileView.as_view(),  name='profile')

в шаблоне обращаюсь так:
<li><a href="{% url 'profile' user_pk=user.pk %}">профиль</a></li>

Как мне сделать так чтоб была возможность просто просматривать чей-то профиль без автоматического перелогина под этого пользователя?
  • Вопрос задан
  • 891 просмотр
Решения вопроса 1
Bobsans
@Bobsans
Full-Stack Developer
@login_required
def view_user_profile(request, user_pk):
    user = User.objects.get(pk=user_pk)
    form = UpdateForm(instance=user)
    return render(request, 'profile.html', {
        'form': form
    })


вот примерно так. зачем гору классов городить?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы