Advertisement
Guest User

Cherrypy Session Exemple

a guest
May 25th, 2015
341
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.66 KB | None | 0 0
  1. #!/usr/bin/env python3
  2.  
  3. from datetime import datetime
  4. import cherrypy as cp
  5.  
  6.  
  7. class User:
  8.     def __init__(self, pseudo, password, first):
  9.         self.pseudo, self.password = pseudo, password
  10.         self.first = self.last = first
  11.  
  12. USERS = { 'admin' : User('admin', 'admin', datetime.now()) }
  13.  
  14.  
  15. HTML = {
  16.     "base" : '<html><body>{body}</body></html>',
  17.     "login" : ( '<h3>Inscription :</h3>'
  18.                 '<form action="/login" method="post">'
  19.                 '<input type="text" name="pseudo" /><br />'
  20.                 '<input type="password" name="password" /><br />'
  21.                 '<input type="password" name="confirm" /><br />'
  22.                 '<input type="submit" value="Inscription" /></form>'
  23.                 '<hr /><h3>Connexion :</h3>'
  24.                 '<form action="/login" method="post">'
  25.                 '<input type="text" name="pseudo" /><br />'
  26.                 '<input type="password" name="password" /><br />'
  27.                 '<input type="submit" value="Connexion" /></form>' ),
  28.     "user" : ( '<p>{pseudo}, inscrit {first}.'
  29.                '<em>Dernière connexion {last}.</em><p>'
  30.                '<p><a href="/logout">logout...</a></p>' )
  31. }
  32.  
  33.  
  34. class App:
  35.  
  36.     @cp.expose
  37.     def index(self):
  38.         # 'current_user' vaut None si l'utilisateur n'est pas connecté,
  39.         # sinon il vaudra une instance de la classe 'User'.
  40.         current_user = cp.session.get('user')
  41.         if current_user:
  42.             return self.user(current_user)
  43.         # si l'utilisateur n'est pas connecté, on force la redirection vers
  44.         # la page d'inscription/connexion (c'est bon pour les stats...) :p
  45.         raise cp.HTTPRedirect('/login')
  46.  
  47.     @cp.expose
  48.     def login(self, pseudo=None, password=None, confirm=None):
  49.         "Gestion minimaliste des formulaire d'inscription/connexion."
  50.         # si 'pseudo' et 'password' sont définis, un des 2 formulaires a été
  51.         # soumit
  52.         if pseudo and password:
  53.             now = datetime.now() # la date de la connexion en cours..
  54.             # si 'password' vaut 'confirm', c'est le formulaire d'inscription
  55.             # qui a été soumit
  56.             if password == confirm:
  57.                 # il faut donc créer un nouvel utilisateur
  58.                 USERS[pseudo] = User(pseudo, password, now)
  59.             if pseudo in USERS and USERS[pseudo].password == password:
  60.                 # après avoir vérifié que l'utilisateur existe et que le mot
  61.                 # de passe est correcte, on met à jour la date de dernière
  62.                 # connexion...
  63.                 user = USERS[pseudo]
  64.                 user.last = now
  65.                 # ...et on garde l'instance de l'utilisateur dans le fichier
  66.                 # de la session courante (ou en mémoire, c'est pareil)
  67.                 cp.session['user'] = user
  68.                 raise cp.HTTPRedirect('/')
  69.         # si le formulaire n'a pas été soumit, ou s'il y a eu une erreur (mot
  70.         # de passe ou pseudo erroné), on affiche simplement les formulaires
  71.         return HTML['base'].format(body=HTML['login'])
  72.  
  73.     @cp.expose
  74.     def logout(self):
  75.         # pour déconnecter un utilisateur, il suffit de faire expirer sa
  76.         # session
  77.         cp.lib.sessions.expire()
  78.         raise cp.HTTPRedirect('/')
  79.  
  80.     def user(self, current_user):
  81.         return HTML['base'].format(
  82.             body=HTML['user'].format(
  83.                 pseudo=current_user.pseudo,
  84.                 first=current_user.first.strftime('le %d/%m/%Y à %H:%M'),
  85.                 last=current_user.last.strftime('le %d/%m/%Y à %H:%M')
  86.             )
  87.         )
  88.  
  89.  
  90. cp.config['tools.sessions.on'] = True # activer les sessions
  91. cp.quickstart(App(), '/')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement