English 中文(简体)
Python Pyramid - Sessions
  • 时间:2024-12-22

Python Pyramid - Sessions


Previous Page Next Page  

A session is a time interval between cpent logs into a server and it logs out of it. Session object is also a dictionary object containing key-value pairs of session variables and associated values. In Pyramid, it is available as an attribute of request object.

In order to handle session mechanism, the Pyramid Apppcation object must be configured with a session factory that returns the session object. Pyramid core provides a basic session factory, which uses cookies to store session information.

Default Session Factory

The pyramid.session module defines SignedCookieSessionFactory class. Its object needs a secret key for digitally signing the session cookie information.


from pyramid.session import SignedCookieSessionFactory
my_session_factory = SignedCookieSessionFactory( abcQWE123!@# )

The set_session_factory() method of the Configurator class uses this factory object to set up the session.


config.set_session_factory(my_session_factory)

Once this is done, the session object is now available for implementation as request.session attribute. To add a session variable, use −


request.session[ user ] =  Admin 

To retrieve a session variable, use −


user=request.session[ user ]

To remove a session variable, use the pop() method.


request.session.pop( user )

Session Example

Described below is the usage of session variable in a Pyramid apppcation. First, the login route (associated with login() view function) brings up a login form on the browser.


@view_config(route_name= login )
def login(request):
   html="""
   <html>
   <body>
      <form action= /add > Enter User name :
         <input type= text  name= user >
         <input type= submit  value= submit >
      </form>
   </body>
   </html>
   """
return Response(html)

The add() function reads the user form attribute and uses its value to add a session variable.


@view_config(route_name= addsession )
def add(request):
   request.session[ user ]=request.params[ user ]
   return Response("<h2>Session object added.</h2><br><h3><a href= /read >cpck here</a></h3>")

The read() view reads back the session variable data and displays a welcome message.


@view_config(route_name= readsession )
def read(request):
   user=request.session[ user ]
   response="<h2>Welcome {} </h2>".format(user)+"<br><h3><a href= /logout >Logout</a></h3>"
   return Response(response)

These views along with the session factory are added in the apppcation configuration.


config.set_session_factory(my_session_factory)
config.add_route( login , / )
config.add_route( logout , /logout )
config.add_route( addsession ,  /add )
config.add_route( readsession ,  /read )
config.scan( session )

Example

The complete code is given below −


from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response
from pyramid.view import view_config
from pyramid.session import SignedCookieSessionFactory
my_session_factory = SignedCookieSessionFactory( abcQWE123!@# )

@view_config(route_name= login )
def login(request):
   html="""
   <html>
   <body>
   <form action= /add >
      Enter User name :
      <input type= text  name= user >
      <input type= submit  value= submit >
   </form>
   </body>
   </html>
"""
   return Response(html)
@view_config(route_name= addsession )
def add(request):
   request.session[ user ]=request.params[ user ]
   return Response("<h2>Session object added.</h2><br><h3><a href= /read >cpck here</a></h3>")

@view_config(route_name= readsession )
def read(request):
   user=request.session[ user ]
   response="<h2>Welcome {} </h2>".format(user)+"<br><h3><a href= /logout >Logout</a>>/<h3>"
   return Response(response)
   
@view_config(route_name= logout )
def logout(request):
   request.session.pop( user )
   response="<h2>You have been logged out </h2><br><h3><a href= / >Login</a></h3>"
   return Response(response)
   
if __name__ ==  __main__ :
   with Configurator() as config:
      config.set_session_factory(my_session_factory)
      config.add_route( login , / )
      config.add_route( logout , /logout )
      config.add_route( addsession ,  /add )
      config.add_route( readsession ,  /read )
      config.scan( session )
      app = config.make_wsgi_app()
   server = make_server( 0.0.0.0 , 6543, app)
   server.serve_forever()

Save this script as main.py in a subfolder (called session ) within the Pyramid virtual environment folder. Note that this subfolder must have an empty __init__.py file for it to be treated as a package.

Output

Run main.py and enter http://localhost:6543/ to open up the login form in the browser.

Submit

Enter the user name and press the "submit" button. The given name is saved as a user session variable.

Session

The cpck here pnk reads back the session variable and displays welcome message.

Welcome Admin

The logout pnk pops the session variable and takes the browser back to the login page.

Advertisements