@The_XXI

Как разрешить определенные действия только авторизованным пользователям?

Добавил возможность входа и регистрации, пытаюсь сделать возможность определенных действий только для авторизованных. Вот код:
def deleteResult(request, item_id):
    if request.user.is_authenticated:
        try:
            item = Results.objects.get(item_id=item_id)
            item.delete()
            return HttpResponseRedirect("/results")
        except Items.DoesNotExist:
            return HttpResponseNotFound("<h2>Result not found</h2>")

Как бы он работает, если юзер вошел, то item удаляется и все нормально, если же юзер не вошел, то не удаляется, но при этом выводит ошибку:
603256350d1c7959439304.png
Менял request.user.is_authenticated на user.is_authenticated, эффект тот же. Как избавиться от ошибки?
  • Вопрос задан
  • 61 просмотр
Решения вопроса 1
SoreMix
@SoreMix
yellow
Если пользователь неавторизован функция возвращает None, добавьте туда что нибудь, например редирект на страницу авторизации

def deleteResult(request, item_id):
    if request.user.is_authenticated:
        try:
            item = Results.objects.get(item_id=item_id)
            item.delete()
            return HttpResponseRedirect("/results")
        except Items.DoesNotExist:
            return HttpResponseNotFound("<h2>Result not found</h2>")
    return HttpResponseRedirect('/register')


Ну и лучше, конечно, использовать reverse, а не хардкодить урлы
https://docs.djangoproject.com/en/3.1/ref/urlresolvers/

Ну и было бы хорошо в принципе использовать специальный декоратор @login_required
https://docs.djangoproject.com/en/3.1/topics/auth/...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@bacon
А ты попробуй понять, что тебе пишут в ошибке, а не тупо случайно править код.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы