сессия в webpy - получение имени пользователя во всех классах - PullRequest
2 голосов
/ 12 сентября 2011

Я использую webpy framework для своего проекта. Я вхожу в систему из своего класса 'login' программы main.py. Я хочу получить имя пользователя в каком-то другом классе. Я пробовал с сессией и долго экспериментировал с ней. Я реализовал сессию, как показано ниже.

store = web.session.DiskStore('sessions')
session = web.session.Session(app,store,initializer={'login': 0,'privilege': 0})

в моем классе входа в main.py следующий код будет работать, когда пользователь отправит имя пользователя и пароль. (Это метод post 0f моего класса входа в систему).

class login:
    def POST(self):
            i = web.input(form_submit="Login")
            authdb = sqlite3.connect('database/users.db')
            conn = authdb.cursor()
            if i.form_submit=='Login':
                check = conn.execute('select * from user_details where username=?and password=?', (i.username, i.password))
                n=check.fetchall()
                if len(n)!=0:
                        session.loggedin = True
                        session.username = i.username
            return render.home('Home')
                else: return render.display('Wrong username or password !')

Я хочу получить имя пользователя в каком-то другом классе. Я попытался получить доступ к имени пользователя с session.username, но он показывает следующую ошибку. AttributeError: 'ThreadedDict' object has no attribute 'username'

Ответы [ 2 ]

3 голосов
/ 12 сентября 2011

Я внес следующие изменения в мою программу main.py.

Изменения сделаны: вместо того, чтобы просто дать

session = web.session.Session(app,store,initializer={'login': 0,'privilege': 0,'user':'anonymous','loggedin':False}) 

Я добавил следующие строки кода,

if web.config.get('_session') is None:
    session = web.session.Session(app,store,initializer={'login': 0,'privilege': 0,'user':'anonymous','loggedin':False})
    web.config._session = session
else:
    session = web.config._session

Я также внес небольшое изменение в словарь инициализатора, инициализировал пользователя как анонимного и зарегистрировался как ложный. Спасибо Андрею за предоставленную мне тему.

2 голосов
/ 12 сентября 2011

Просто укажите значения по умолчанию для loggedin и username в сеансах initializer dict.Кажется, ошибка появляется, когда эти атрибуты не установлены (то есть, когда пользователь не вошел в систему), и вы пытаетесь получить к ним доступ.

...