Я использую 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)