Est-ce que Python a une fonctionnalité de session ou pas?Session en python?
Si c'est le cas, alors comment puis-je utiliser ceci et quelle bibliothèque dois-je utiliser?
Est-ce que Python a une fonctionnalité de session ou pas?Session en python?
Si c'est le cas, alors comment puis-je utiliser ceci et quelle bibliothèque dois-je utiliser?
Beaker est très populaire pour les applications web Python basées sur WSGI, mais vous devez comprendre que Python est un langage de programmation polyvalent, il n'est pas orienté à 100% vers le web comme PHP.
Il serait également utile si vous avez inscrit plus d'informations sur l'application dont vous avez besoin dans.
Certains frameworks Python offrent le concept de « session ». (Le langage Python lui-même, bien sûr, n'a rien à voir avec ça!).
Par exemple, Beaker est un excellent middleware WSGI léger qui prend en charge les sessions; puisque WSGI est généralement le meilleur moyen de connecter n'importe quel framework web Python à n'importe quel serveur web, et bien sûr vous pouvez toujours insérer un middleware WSGI dans les transactions WSGI, Beaker (comme tout autre middleware WSGI) est très largement applicable.
Merci ... que pensez-vous de l'API mod_python? est-ce vraiment utile dans mon application. effectivement ce que je veux faire est. une variable de session stocke ma valeur d'authentification de connexion quelle qu'elle soit et transmet cette valeur avant d'exécuter tout autre script. mon script vient d'être appelé script wrapper ... j'espère avoir bien expliqué et vous comprenez ce que je veux savoir? –
@Rahul, je pense que WSGI est bien meilleur que mod_python: il ne vous relie pas à un seul serveur web, et vous permet de "brancher" de nombreux modules middleware utiles - y compris ceux sur l'authentification et sur les sessions; ** très ** modulaire et flexible - et vous pouvez toujours choisir quel serveur ** et ** quel cadre vous aimez, tout à fait indépendamment. –
Oui, je n'utiliserais mod_python pour rien aujourd'hui ... beaucoup trop de lock-in. WSGI est là où il est et mod_wsgi est une bonne implémentation rapide. – bobince
Cela peut être une vieille question, mais j'ai rencontré le même problème qu'il n'y a pas de prise en charge de session intégrée en Python. J'ai écrit un gestionnaire simple session qui pourrait être utile pour quelqu'un:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import tempfile
import hashlib
import os
import time
import random
import errno
import ast
import pprint
import fcntl
class CGISession:
__sessionfile = ''
__newid = ''
__date = ''
__tmp = ''
__pid = ''
__time = ''
__rand = ''
__pp = pprint.PrettyPrinter()
__fs = ''
def __init__(
self,
id=None,
directory=None,
hash='md5',
):
if directory is None:
self.__directory = tempfile.gettempdir()
else:
if not os.path.exists(directory):
try:
os.makedirs(directory)
except OSError, error:
if error.errno != errno.EEXIST:
raise
self.__directory = directory
if hash not in ['md5', 'sha256', 'sha512']:
self.__hash = 'md5'
else:
self.__hash = hash
if id is None:
self.__id = self.__genSessionID()
self.__fs = open(os.path.join(self.__directory,
'pycgiession_{0}'.format(self.__id)), 'w')
fcntl.flock(self.__fs.fileno(), fcntl.LOCK_EX)
self.__fs.write('{}')
self.__fs.close()
self.__sessionfile = os.path.join(self.__directory,
'pycgiession_{0}'.format(self.__id))
os.chmod(self.__sessionfile, 0640)
else:
try:
open(os.path.join(self.__directory,
'pycgiession_{0}'.format(os.path.basename(id))),
'r').close()
self.__id = os.path.basename(id)
self.__sessionfile = os.path.join(self.__directory,
'pycgiession_{0}'.format(self.__id))
os.chmod(self.__sessionfile, 0640)
except IOError, error:
if error.errno == errno.ENOENT:
self.__id = self.__genSessionID()
self.__fs = open(os.path.join(self.__directory,
'pycgiession_{0}'.format(self.__id)), 'w')
fcntl.flock(self.__fs.fileno(), fcntl.LOCK_EX)
self.__fs.write('{}')
self.__fs.close()
self.__sessionfile = os.path.join(self.__directory,
'pycgiession_{0}'.format(self.__id))
os.chmod(self.__sessionfile, 0640)
else:
raise
def __genSessionID(self):
self.__pid = str(os.getpid())
self.__time = ''.join(map(str, time.gmtime()[0:]))
self.__rand = str(random.random())
if self.__hash == 'sha256':
sha256 = hashlib.sha256()
sha256.update(self.__pid)
sha256.update(self.__time)
sha256.update(self.__rand)
self.__newid = sha256.hexdigest()
elif self.__hash == 'sha512':
sha512 = hashlib.sha512()
sha512.update(self.__pid)
sha512.update(self.__time)
sha512.update(self.__rand)
self.__newid = sha512.hexdigest()
else:
md5 = hashlib.md5()
md5.update(self.__pid)
md5.update(self.__time)
md5.update(self.__rand)
self.__newid = md5.hexdigest()
return self.__newid
def getID(self):
return self.__id
def setParam(self, key, value):
self.__fs = open(self.__sessionfile, 'r')
fcntl.flock(self.__fs.fileno(), fcntl.LOCK_EX)
self.__date = self.__fs.readlines()
self.__fs.close()
self.__fs = open(self.__sessionfile, 'w')
fcntl.flock(self.__fs.fileno(), fcntl.LOCK_EX)
self.__date = ast.literal_eval(self.__date[0])
self.__date[key] = value
self.__fs.write(self.__pp.pformat(self.__date))
self.__fs.close()
def getParam(self, key):
self.__fs = open(self.__sessionfile, 'r')
fcntl.flock(self.__fs.fileno(), fcntl.LOCK_EX)
self.__date = self.__fs.readline()
self.__fs.close()
self.__date = ast.literal_eval(self.__date)
try:
self.__date = self.__date[key]
return self.__date
except KeyError:
return None
def getAll(self):
self.__fs = open(self.__sessionfile, 'r')
fcntl.flock(self.__fs.fileno(), fcntl.LOCK_EX)
self.__date = self.__fs.readlines()
self.__fs.close()
self.__date = ast.literal_eval(self.__date[0])
return self.__date
def delParam(self, key):
self.__fs = open(self.__sessionfile, 'r')
fcntl.flock(self.__fs.fileno(), fcntl.LOCK_EX)
self.__date = self.__fs.readlines()
self.__fs.close()
self.__fs = open(self.__sessionfile, 'w')
fcntl.flock(self.__fs.fileno(), fcntl.LOCK_EX)
self.__date = ast.literal_eval(self.__date[0])
try:
del self.__date[key]
except KeyError:
pass
self.__fs.write(self.__pp.pformat(self.__date))
self.__fs.close()
def clear(self):
self.__fs = open(self.__sessionfile, 'w')
fcntl.flock(self.__fs.fileno(), fcntl.LOCK_EX)
self.__fs.write('{}')
self.__fs.close()
def delete(self):
os.remove(self.__sessionfile)
Exemples:
>>> from CGISession import CGISession
>>> session = CGISession()
>>>
>>> session.getID()
'7e487c3c300126fddbecb37b041d66e3'
>>>
>>> session.setParam('name','A')
>>> session.setParam('friends',['C','D','E'])
>>>
>>> session.getParam('name')
'A'
>>> session.getParam('friends')
['C', 'D', 'E']
>>>
>>> session.delParam('name')
>>> session.delParam('friends')
>>>
>>> session.getParam('name')
>>> session.delParam('friends')
>>>
>>> session.delete()
>>>
demandez-vous d'un framework web? Quel framework web utilisez-vous? Python a des dizaines. –