Как перенаправить пользователя на страницу входа при добавлении товаров в корзину? - PullRequest
2 голосов
/ 26 марта 2020

Я новичок ie до django. Я создаю простую систему заказов. Я хочу только авторизованный пользователь, чтобы добавить товары в корзину. Если пользователь не вошел в систему, перенаправьте пользователя на страницу входа и после повторного входа в систему перенаправьте пользователя на предыдущую страницу.

Это мои views.py

@require_POST
@login_required
def cart_add(request, dish_id):
    cart = Cart(request)
    dish = get_object_or_404(Dish, id=dish_id)
    form = CartAddDishForm(request.POST)
    if form.is_valid():
        cd = form.cleaned_data
        cart.add(dish=dish, quantity=cd['quantity'], update_quantity=cd['update'])
    return redirect('cart:cart_detail')

Ответы [ 2 ]

0 голосов
/ 26 марта 2020
def cart_add(request, dish_id):
    if request.user.is_authenticated: #checks user is logined or not
        cart = Cart(request)
        dish = get_object_or_404(Dish, id=dish_id)
        form = CartAddDishForm(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            cart.add(dish=dish, quantity=cd['quantity'], update_quantity=cd['update'])
        return redirect('cart:cart_detail')
    else:
        return redirect('login_page')
0 голосов
/ 26 марта 2020

Вы должны поменять местами декораторы. Прямо сейчас функция просмотра сначала украшена @login_required, а затем украшена @require_POST. Но это означает, что если вы сделаете запрос, который не запрос POST, он вернет ошибку 405, независимо от того, вошел ли пользователь в систему.

При замене декораторов он будет сначала проверьте, вошел ли пользователь в систему, если это не так, он перенаправит пользователя в представление входа в систему. Если пользователь вошел в систему, но метод не POST, он вернет ошибку 405.

<b>@login_required</b>
<b>@require_POST</b>
def cart_add(request, dish_id):
    # &hellip;

Обратите внимание, что перенаправление на cart_add, однако, не имеет особого смысла, поскольку требует запроса POST , и это означает, что после входа в систему он поднимет 405.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...