перенаправление на разные страницы в django после входа в систему

#django

#django

Вопрос:

Когда я нажимаю на ссылку «Продать товар» с домашней страницы, она перенаправляет на страницу входа в систему, а после завершения входа в систему перенаправляет на домашнюю страницу, и я должен снова нажать на ссылку «Продать товар», чтобы заполнить форму.Я хочу перенаправить на страницу sell_product после входа в систему вместо домашней страницы.Как я могу это сделать?? Как я могу перенаправить на разные страницы с одного URL входа.

urls.py

  path('signin/user/',views.users_signin,name='users_signin'),
 path('sell/product/',views.sell_product,name='sell_product'),
  

views.py

  def users_signin(request):
        if request.method == "POST":
            form = UserSigninForm(request.POST)
            username = form['username'].value()
            password = form['password'].value()
            user = authenticate(username=username,password=password)
            login(request,user)
            return redirect('shop:home')
        else:
            form = UserSigninForm()
        return render(request,'shop/users_signin.html',{'form':form})

def sell_product(request):
    if request.user.is_authenticated:
        if request.method == "POST":
            form = SellProductForm(request.POST,request.FILES)
            if form.is_valid():
                myproduct = form.save(commit=False)
                myproduct.seller = request.user
                myproduct.save()
                messages.success(request,'Your Product has been posted successfully.!!')
                return redirect("shop:home")
        else:
            form = SellProductForm()
        return render(request,'shop/sell_product.html',{'form':form})
    else:
        messages.error(request,'please login first')
        return redirect('shop:users_signin')
  

sell_product.html

 {% extends "shop/base.html" %}
{% load bootstrap4 %}

<title>{% block title %}Sell a Product{% endblock %}</title>
{% block content %}
<div class="container">
    <div class="row">
        <div class="col-lg-6 offset-lg-3 col-sm-10 offset-sm-1">
            <div class="card my-5">
                <div class="card-header text-center">
                    Sell Your Product
                </div>
                <div class="card-body">
                     <form action="{% url 'shop:sell_product' %}" method="post" enctype="multipart/form-data">
                        {% csrf_token %}
                        {% bootstrap_form form %}
                        <input type="submit" class="btn btn-success text-center w-100 mb-3" value="Submit">
                    </form>

                </div>
            </div>
        </div>
    </div>
</div>
{% endblock %}
  

base.html

  <li class="nav-item">
        <a class="nav-link" href="{% url 'shop:sell_product' %}">Sell a Product</a>
      </li>
  

forms.py

 class SellProductForm(forms.ModelForm):
        class Meta:
            model = Product
            fields = ['name','image','category', 'description', 'brand', 'quantity', 'price', 'shipping_fee']
    class UserSigninForm(forms.Form):
        username = forms.CharField()
        password = forms.CharField(widget=forms.PasswordInput)
  

Ответ №1:

Вы можете указать next параметр в URL, чтобы настроить перенаправление страницы после входа в систему.

Попробуйте

 return redirect('%s?next=%s' % (reverse('shop:users_signin'), request.path))
  

Смотрите https://docs.djangoproject.com/en/2.2/topics/auth/default/#limiting-access-to-logged-in-users-that-pass-a-test

Вы также можете использовать @login_required декоратор, чтобы исключить блок ‘if-else`, который обеспечивает аутентификацию.