Django: как перенаправить test_func на запрещенную страницу 403 вместо логина - PullRequest
0 голосов
/ 07 марта 2019

Когда вошедший в систему пользователь хочет обновить сообщение (UpdateView), которое он не создал, функция test_func должна перенаправить пользователя на страницу 403 Forbidden вместо страницы входа. Однако в моем случае он перенаправляет на страницу входа, даже если пользователь уже вошел в систему. Кто-нибудь имеет представление о том, почему это происходит? Спасибо!

class PostUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
model = Post
fields = ['title', 'content']

def form_valid(self, form):
    form.instance.author = self.request.user
    return super(PostUpdateView,self).form_valid(form)

def test_func(self):
    post = self.get_object()
    if self.request.user == post.author:
        return True
    return False

Ответы [ 2 ]

1 голос
/ 07 марта 2019
class PostUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
    raise_exception = True  # <<<---
    ...

https://docs.djangoproject.com/en/2.1/topics/auth/default/#the-loginrequired-mixin

0 голосов
/ 07 марта 2019

Вы пробовали PermissionDenied от django.core.exceptions?

from django.core.exceptions import PermissionDenied

def edit(request, pk):
    if not request.user.is_staff:
        raise PermissionDenied
    # ...

Вы могли бы сделать что-то вроде этого:

def test_func(self):
    post = self.get_object()
    if self.request.user == post.author:
        return True
    raise PermissionDenied
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...