@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, эффект тот же. Как избавиться от ошибки?
  • Вопрос задан
  • 110 просмотров
Решения вопроса 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/...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 23:00
5000 руб./за проект
19 апр. 2024, в 20:43
20000 руб./за проект