IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Django Python Discussion :

[ Django ] Creer une boite pour se logger


Sujet :

Django Python

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut [ Django ] Creer une boite pour se logger
    Bonjour,
    J'aimerais créer une boite sur mon site pour se logger. Je voudrais qu'elle soit apparente quelquesoit la page consultée. J'utilise 'django.contrib.auth.views.login' comme indiquée dans la doc de djangoproject. Le problème est que pour utiliser views.login je dois l'envoyer comme contexte grâce à urls.py :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (r'^$', auth_views.login, {'template_name':'index.html'}),
    Du coup, le contexte envoyé au template index.html est celui de views.login, ce qui m'empêche d'envoyer d'autres contextes ou variables.
    Comment faire pour envoyer le contexte de views.login à toutes mes pages et pouvoir en définir de nouveaux malgré cela ?
    Si ce n'est pas très clair, j'ai trouvé un site qui reflete ce que je veux faire( fais avec django bien sur): www.agrotis.com.
    Toute piste/aide est la bienvenue.
    Merci

  2. #2
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    Fais ton propre view avec un form de login.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    from django.contrib.auth.views import login
     
    def index(request):
      return render_to_response('index.html', {...})
     
    def signon(request):
      if request.method == 'POST':
        # Utilise login(), etc.

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Salut GnuVince,
    Merci pour ta réponse mais l'exemple que tu me donnes crée une vue "signon", c'est à dire une page spéciale pour se logger ( si j'ai bien compris ). Le truc, c'est que j'aimerais que le form de login soit inclus dans ma page index mais je ne sais pas comment faire. Dois-je recopier entierement la vue de login dans ma vue index pour que ça marche ?
    Merci.
    ++

  4. #4
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    signon() serait la fonction qui est appelé quand tu fais un submit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    # urls.py
    ...
    (r'signon/$', 'project.app.views.signon'),
    ...
     
     
    # Fichier template
    <form action="/signon/" method="post">
      <input type="text" name="username" />
      <input type="password" name="password" />
      <input type="submit" value="Se connecter" />
    </form>
    Tu mets le code du formulaire dans le ou les templates que tu as besoin, et dans la fonction signon(), tu vérifies le login (voir documentation de Django). Tu finis avec un HttpResponseRedirect() pour envoyer l'usager à une page appropriée.

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Je vois ce que tu veux dire. Le problème en fait c'est que j'utilise les forms pour gérer mes champs de formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	{% if form.has_errors %}
    			<p>Your username and password didn't match. Please try again.</p>
    			{% endif %}
     
    			<form method="post" action=".">
    			<table>
    			<tr><td><label for="id_username">Username:</label></td><td>{{ form.username }}</td></tr>
    			<tr><td><label for="id_password">Password:</label></td><td>{{ form.password }}</td></tr>
    			</table>
     
    			<input type="submit" value="login" />
    			<input type="hidden" name="next" value="{{ next }}" />
    			</form>
    Donc je dois envoyer le contexte avec les forms pour que ça fonctionne...
    Pour l'instant, je bidouille, j'y arrive à peu près en mettant dans ma vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    from django.shortcuts import render_to_response
    from django.contrib.auth.forms import AuthenticationForm
    from django import oldforms
    def index(request):
    	manipulator = AuthenticationForm(request)
    	errors = manipulator.get_validation_errors(request.POST)
    	return render_to_response('index.html', {'form': oldforms.FormWrapper(manipulator, request.POST, errors)})
    Mais bon, c'est pas encore ça. Je crois que je vais faire plus simple en mettant une seule page de login avec un lien vers elle sur chaque page, ce sera plus simple...
    ++

  6. #6
    Futur Membre du Club
    Inscrit en
    Mars 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Voila, c'est ce que j'ai fait... J'ai créé une page de login et ensuite dans mes vues, je rajoute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    def index(request):
        user = request.user
        return render_to_response('index.html', { 'user' : user })
    Après ca me permet dans mes templates de distinguer les membres des visiteurs avec ++

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 16
    Points : 11
    Points
    11
    Par défaut Oui... mais comment faire?
    Bonjour,

    La question que je me pose est la suivante:
    Où doit-on créer la view? vue que mon template avec mon formulaire est index.html, Où dois-je mettre mes fonction de login? je doit crée une nouvel app avec startapp?

    Merci!

  8. #8
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    Citation Envoyé par DonPardo Voir le message
    Bonjour,

    La question que je me pose est la suivante:
    Où doit-on créer la view? vue que mon template avec mon formulaire est index.html, Où dois-je mettre mes fonction de login? je doit crée une nouvel app avec startapp?

    Merci!
    Tu les mets ou tu veux. Généralement, ça va être dans le views.py de ton application.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    C'est bon j'ai reussi, merci à vous.

  10. #10
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 46
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par DonPardo Voir le message
    C'est bon j'ai reussi, merci à vous.
    tu as fait comment ?

    Sinon, une solution serai d'utiliser RequestContext comme expliqué ici:
    http://www.djangoproject.com/documen...requestcontext

    C'est justement fait pour ce genre de cas.
    Bonne continuation.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 11/06/2007, 08h20
  2. [MySQL] créer une boite de reception (e-mail)
    Par manpac dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 03/11/2006, 12h04
  3. [Debutant]creer une requete pour une liste deroulante
    Par torNAdE dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 14/07/2006, 15h22
  4. créer une zone pour afficher une BMP scrollable
    Par hansaplast dans le forum wxWidgets
    Réponses: 15
    Dernier message: 14/03/2006, 09h25
  5. creer une extension pour exchange
    Par simoryl dans le forum C++
    Réponses: 2
    Dernier message: 23/03/2005, 11h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo