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', '')

を使用すると、POST または GET のいずれかを使用してrequest.REQUEST取得できるため、 . POST/REDIRECT/GETも問題なく実行できます。n/login?n=/foo/bar

于 2015-11-06T02:55:39.807 に答える