- Python Pyramid - Discussion
- Python Pyramid - Useful Resources
- Python Pyramid - Quick Guide
- Python Pyramid - Deployment
- Python Pyramid - Security
- Python Pyramid - Logging
- Python Pyramid - Testing
- Command Line Pyramid
- Creating A Project Manually
- Python Pyramid - Package Structure
- Python Pyramid - Project Structure
- Python Pyramid - Creating A Project
- Python Pyramid - Cookiecutter
- Pyramid - Using SQLAlchemy
- Python Pyramid - Message Flashing
- Python Pyramid - Events
- Python Pyramid - Sessions
- Python Pyramid - Response Object
- Python Pyramid - Request Object
- Python Pyramid - Static Assets
- Pyramid - HTML Form Template
- Python Pyramid - Templates
- Python Pyramid - Route Prefix
- Python Pyramid - View Configuration
- Python Pyramid - Url Routing
- Pyramid - Application Configuration
- Python Pyramid - Hello World
- Pyramid - Environment Setup
- Python Pyramid - Overview
- Python Pyramid - Home
Selected Reading
- Who is Who
- Computer Glossary
- HR Interview Questions
- Effective Resume Writing
- Questions and Answers
- UPSC IAS Exams Notes
Python Pyramid - Sessions
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.
Enter the user name and press the "submit" button. The given name is saved as a user session variable.
The cpck here pnk reads back the session variable and displays welcome message.
The logout pnk pops the session variable and takes the browser back to the login page.
Advertisements