2009-07-02 7 views
2

Après avoir été insatisfait des solutions existantes, j'ai écrit un fournisseur OpenId pour Django.Comment présélectionner le nom d'utilisateur dans le formulaire de connexion Djangos?

Si maintenant quelqu'un veut s'authentifier quelque part comme http://tejp.de/users/abc/ et doit se connecter pour cela, je veux afficher le formulaire de connexion avec le préréglage de nom d'utilisateur pour « abc ». Les fonctions standard comme redirect_to_login ne semblent pas fournir de paramètres pour cela et je ne vois pas comment je pourrais prédéfinir cette valeur lors de la redirection vers la vue de connexion dans django.contrib.auth.views.login manuellement. De plus, il semble qu'il n'y ait pas de moyen facile d'obtenir une valeur de paramètre supplémentaire jusqu'au modèle, de sorte que je pourrais peut-être y insérer la valeur prédéfinie.

Existe-t-il un moyen de remplir automatiquement un nom d'utilisateur dans le formulaire de connexion? Si possible, je voudrais utiliser la vue de connexion normale pour cela, ne pas copier & coller tout le code de connexion et modifier les modifications nécessaires.

Répondre

-1

Certaines façons de résoudre le problème ci-dessus sont:

  1. Écrivez votre propre formulaire d'authentification et le nom d'utilisateur de pré-remplissage avant d'afficher.

  2. Utilisez javascript pour supprimer un nom d'utilisateur de l'URL et le déposer dans le formulaire.

1

Rappelez-vous, django est tout python, et la source est votre ami. Voici la source d'origine pour redirect_to_login.

def redirect_to_login(next, login_url=None, redirect_field_name=REDIRECT_FIELD_NAME): 
    "Redirects the user to the login page, passing the given 'next' page" 
    if not login_url: 
     login_url = settings.LOGIN_URL 
    return HttpResponseRedirect('%s?%s=%s' % (login_url, urlquote(redirect_field_name), urlquote(next))) 

Il semble que vous pourriez même simplement remplacer login_url avec un lien vers une URL qui prend les paramètres appropriés. Quelque chose comme

return redirect_to_login(login_url=reverse('my_login_view', [], {'username': username})) 

Vous n'avez pas besoin d'une nouvelle forme, il vous suffit de préremplir le formulaire de connexion existant.

Questions connexes