0

我的登录后重定向 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')
4

1 回答 1

0

为什么不只是:

<input type="hidden" name="n" value="{{ n }}">

在视图中:

n = request.REQUEST.get('n', '')

使用request.REQUEST您可以n使用 POST 或 GET 获取,因此您仍然可以链接到类似/login?n=/foo/bar. 您也可以毫无问题地进行POST/REDIRECT/GET 。

于 2015-11-06T02:55:39.807 回答