登录后重定向到django中的其他页面

时间:2019-03-13 10:36:02

标签: django

当我单击主页上的销售产品链接时,它将重定向到登录页面,登录完成后它将重定向到主页,我必须再次单击“销售产品”链接以填写表格。我想重定向到登录后进入sell_product页面而不是主页。我该怎么做?如何从一个登录网址重定向到其他页面。

  

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 个答案:

答案 0 :(得分:1)

您可以在URL中指定next参数,以在登录后设置重定向页面。

尝试

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`块。