Повторное использование объекта запроса Bottle.py (жизненный цикл объекта) - PullRequest
0 голосов
/ 09 марта 2012

Я использую Bottle.py для небольшого веб-приложения и внедрила систему входа в систему, в которой значение cookie проверяется в начале каждого запроса.Если файл cookie установлен, значение cookie проверяется в базе данных пользователей на наличие действительных учетных данных, и строка, содержащая фактическое имя пользователя, добавляется в объект запроса для последующего использования в том же запросе;

request.account = username #where username is fetched from the database

Цельсостоит в том, чтобы 1) проверять входы в систему заранее с помощью обычной процедуры и 2) сохранять имя пользователя для последующего использования при построении специального ответа

Моя проблема заключается в том, что после первого запроса, где задан request.account, все запросы после этого будутустановить это значение.Это заставляет меня задуматься, есть ли внутреннее повторное использование объекта запроса между запросами в Bottle.

Кто-нибудь знает, как это работает;если объект запроса используется повторно или это только мой код, содержащий ошибки?Любые идеи, чтобы решить эту проблему?

Для записи, я использую встроенный веб-сервер для тестирования, работает на Python 2.7 на OS X.

Редактировать:

Я написал полностью функциональный код, иллюстрирующий проблему, изложенную выше.Это довольно упрощено, чтобы избежать куки и базы данных.

#!/usr/bin/python2.7

from bottle import request, response, route, run

# some login cookie validation routine...
# this might validate cookie against user database
# and store the username of the logged in user
# in request.account.
def validate():

if not hasattr(request, 'account'):
    print "request.account is NOT set"

    request.account = "SomeUsername"

    return False

else:
    # here is the problem, this implies object reuse
    # since I am only calling validate() once?
    # or is my code bugged somehow?

    print "request.account is already set"

    return True


@route('/')
def index():

ret = validate()    #validating cookie

if ret:
    username = request.account
else:
    username = "<Not logged in>"

    return "TEST: this is /, username: %s" % username


if __name__ == "__main__":
    run(host='localhost', port=8080, debug=True, reloader=True)
...