django - 登录后重定向到django中的不同页面
问题描述
当我从主页单击销售产品链接时,它会重定向到登录页面,登录完成后它会重定向到主页,我必须再次单击销售产品链接来填写表格。我想在之后重定向到 sell_product 页面登录而不是主页。我该怎么做?如何从一个登录 url 重定向到不同的页面。
网址.py
path('signin/user/',views.users_signin,name='users_signin'),
path('sell/product/',views.sell_product,name='sell_product'),
视图.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')
出售产品.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>
表格.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)
解决方案
您可以next
在 url 中指定参数以设置登录后的重定向页面。
尝试
return redirect('%s?next=%s' % (reverse('shop:users_signin'), request.path))
您也可以使用@login_required
装饰器来省略确保身份验证的“if-else”块。
推荐阅读
- ionic-framework - 如何使用离子背景地理定位插件API完成?
- android - 下面源码中如何使用Retrofit Cache?
- java - 如何使用 JDK 11 向 Collection.toArray() 提供生成器函数?
- html - 仅在 iPad 视图上显示的列之间的垂直间隙
- ios - 从 URL Xcode Swift 加载 3d 资源
- python - Python:不多次打印不等于0
- pyspark - pyarrow 错误:toPandas 尝试了箭头优化
- java - Springboot中无限执行方法
- javascript - 如何将画布图像保存为数据库并生成 url
- javascript - Promisify 使用速率限制器的回调