2015-11-06 1 views
0

Ma méthode pour rediriger une URL après la connexion, fonctionne bien mais le code du template n'est pas très sexy, puis-je avoir le vôtre s'il vous plait? ma fonction dans views.pyUtiliser le paramètre suivant pour les vues login_required

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()) 

mon modèle:

<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 %}

mon décorateur:

@login_required(redirect_field_name='n') 

Répondre

0

Pourquoi ne pas simplement:

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

Et dans la vue:

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

En utilisant request.REQUEST vous pouvez obtenir à partir n soit en utilisant POST ou GET afin que vous puissiez créer des liaisons vers une URL comme /login?n=/foo/bar. Vous pouvez également faire POST/REDIRECT/GET sans problèmes.