Proper way to do session handling in Python + Pylons for a php programmer

I'm a php programmer who's just getting started with Python. I'm trying to get Python to handle login/logout via database-stored sessions. Things work, but seem inconsistent. For example, sometimes a user isn't logged out. Sometimes users "switch" logins. I'm guessing this has something to do with thread-safety, but I'm just not sure where to begin on how to fix this. Any help would be appreciated. Here's what I have now:

#lib/base.py

def authenticate():
#Confirm login
 try:
     if user['authenticated'] != True:
         redirect_to(controller='login', action='index')
 except KeyError:
     redirect_to(controller='login', action='index')

#Global variables
user = {}
connection = {}

class BaseController(WSGIController):

#Read if there is a cookie set
     try:
         session = request.cookies['session']

         #Create a session object from the session id
         session_logged_in = Session(session)

         #If the session is valid, retrieve the user info
         if session_logged_in.isValid(remote_addr):

             #Set global variables about the logged in user
             user_logged_in = User(session_logged_in.user_id)
             user['name'] = c.name = user_logged_in.name
             user['name_url'] = c.name_url = user_logged_in.name_url
             user['first_name'] = c.first_name = user_logged_in.first_name
             user['last_name'] = c.last_name = user_logged_in.last_name
             user['email'] = c.email = user_logged_in.email
             user['about'] = c.about = user_logged_in.about
             user['authenticated'] = c.authenticated = True
             user['profile_url'] = c.profile_url = user_logged_in.profile_url 
             user['user_thumb'] = c.user_thumb = user_logged_in.user_thumb
             user['image_id'] = c.image_id = user_logged_in.image_id
             user['id'] = c.user_id = user_logged_in.id

             #Update the session
             session_logged_in.current_uri = requested_url
             session_logged_in.update()

     #If no session has been set, do nothing
     except KeyError:
         user['authenticated'] = False

I can then access the user{} global from my controllers:

#controllers/profile.py
from project.lib.base import BaseController, user
class ProfileController(BaseController):

    def index(self, id=None, name_url=None):

        #If this is you
         if user['id'] == 1
             print 'this is you'

Is there a better way to do this? Thanks for your help.


Asked by: Anna772 | Posted: 06-12-2021






Answer 1

Pylons has a 'sessions' object that exists to handle this kind of situation. The example on the Pylons website seems to match what you want.

I think you are seeing problems because of the globals 'user' and 'connection'. Pylons has a globals object that is designed to share information between all controllers and is not reset on each request.

Answered by: Steven671 | Posted: 07-01-2022



Similar questions

vba - Resources for Python Programmer


Now that Python 2.6 is out, what modules currently in the language should every programmer know about?

A lot of useful features in Python are somewhat "hidden" inside modules. Named tuples (new in Python 2.6), for instance, are found in the collections module. The Library Documentat...


Advice for C# programmer writing Python


C++ or Python for C# programmer?

Closed. This question is opinion-based. It is not c...


Python for C++ or Java Programmer

I have a background in C++ and Java and Objective C programming, but i am finding it hard to learn python, basically where its "Main Function" or from where the program start executing. So is there any tutorial/book which can teach python to people who have background in C++ or Java. Basically something which can show if how you were doing this in C++ and how this is done in Python. OK i think i did not put the que...


java - asm / C / Python / Perl / Lisp / Scheme Programmer looking for something new to learn

Closed. This question does not meet Stack Overflow guid...


Python for a Perl programmer

I am an experienced Perl developer with some degree of experience and/or familiarity with other languages (working experience with C/C++, school experience with Java and Scheme, and passing familiarity with many others). I might need to get some web work done in Python (most immediately, related to Google App Engine). As such, I'd like to ask SO overmind for good references on how to best learn Python for someone w...


Perl for a Python programmer

I know Python (and a bunch of other languages) and I think it might be nice to learn Perl, even if it seems that most of the people is doing it the other way around. My main concern is not about the language itself (I think that part is always easy), but about learning the Perlish (as contrasted with Pythonic) w...


Newbie Python programmer tangling with Lists

Here's what I've got so far: # A. match_ends # Given a list of strings, return the count of the number of # strings where the string length is 2 or more and the first # and last chars of the string are the same. # Note: python does not have a ++ operator, but += works. def match_ends(words): counter = 0 for word in words: if len(word) >= 2 and word[0] == word[-1]: counter += counter retur...


php - Old desktop programmer wants to create S+S project

I have an idea for a product that I want to be web-based. But because I live in a part of the world where the internet is not always available, there needs to be a client desktop component that is available for when the internet is down. Also, I have been a SQL programmer, a desktop application programmer using dBase, VB and Pascal, and I have created simple websites using HTML and website creation tools, such as Frontpage...






Still can't find your answer? Check out these communities...



PySlackers | Full Stack Python | NHS Python | Pythonist Cafe | Hacker Earth | Discord Python



top