我的方法在登录后重定向url,效果很好,但模板的代码不是很性感,我可以拥有你的吗?我在views.py 中的函数
def connexion(request):
error = False
n=request.GET.get('n')
if request.method == "POST":
form = ConnexionForm(request.POST)
if form.is_valid():
username = form.cleaned_data["username"]
password = form.cleaned_data["password"]
user = authenticate(username=username, password=password)
if user:
login(request, user)
if request.GET.get('n'):
return redirect(request.GET['n'])
else:
return redirect(accueil)
else:
error = True
else:
form = ConnexionForm()
return render(request, 'blog/connect_user.html', locals())
我的模板:
<h1>Se connecter</h1>
{% if error %}
<p><strong>Utilisateur inconnu ou mauvais mot de passe.</strong></p>
{% endif %}
{%if n %}
<form method="post" action="{% url 'connexion' %}?n={{ n }}">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Se connecter" />
</form>
{% else %}
<form method="post" action="{% url 'connexion' %}">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Se connecter" />
</form>
{% endif %}
我的装饰师:
@login_required(redirect_field_name='n')
为什么不只是:
<input type="hidden" name="n" value="{{ n }}">
在视图中:
n = request.REQUEST.get('n', '')
使用request.REQUEST
,您可以使用POST或get获取n
,这样您仍然可以链接到类似/login?n=/foo/bar
的URL。您也可以毫无问题地执行POST/REDIRECT/GET。