English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Cookie хранятся в виде текстового файла на компьютере клиента. Целью является запоминание и отслеживание данных, связанных с использованием клиента, для улучшения опыта доступа и статистики сайта.
Объект запроса содержит атрибут cookie. Это словарь объектов всех переменных cookie и их значений, отправленных клиентом. Помимо этого, cookie также хранит время истечения срока действия, путь и доменное имя сайта.
В Flask cookies устанавливаются на уровне объекта ответа. Для получения объекта ответа из значения возвращаемого из функции представления используется функция make_response(). Затем для хранения cookie используется функция set_cookie() объекта ответа.
Перечитывание cookie очень легко. Для чтения cookie можно использовать метод get() свойства request.cookies.
В Flask-приложении, когда доступ к URL => / выполняется, открывается простая форма.
# Filename: example.py # Copyright: 2020 By w3codebox # Author by: ru.oldtoolbag.com # Date: 2020-08-08 @app.route('/') def index(): return render_template('index.html')
Эта HTML-страница содержит текстовое поле, полный код приведен ниже -
# Filename: example.py # Copyright: 2020 By w3codebox # Author by: ru.oldtoolbag.com # Date: 2020-08-08 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Пример Flask с использованием Cookies</title> </head> <body> <form action="/setcookie" method="POST"> <p><h3>Ввести userID</h3></p> <p><input type='text' name='name'/></p> <p><input type='submit' value='Войти'/></p> </form> </body> </html>
Форма отправляется на URL => /setcookie. Соответствующая функция представления устанавливает cookie с именем: userID и отображает его на другой странице.
# Filename: example.py # Copyright: 2020 By w3codebox # Author by: ru.oldtoolbag.com # Date: 2020-08-08 @app.route('/setcookie', methods=['POST', 'GET']) def setcookie(): if request.method == 'POST': user = request.form['name'] resp = make_response(render_template('readcookie.html')) resp.set_cookie('userID', user) return resp
readcookie.html содержит гиперссылку на другой функционал getcookie(), который читает и отображает значение cookie в браузере.
# Filename: example.py # Copyright: 2020 By w3codebox # Author by: ru.oldtoolbag.com # Date: 2020-08-08 @app.route('/getcookie') def getcookie(): name = request.cookies.get('userID') return '<h1>welcome '+name+'</h1>'
Полный код приложения приведен ниже -
# Filename: example.py # Copyright: 2020 By w3codebox # Author by: ru.oldtoolbag.com # Date: 2020-08-08 from flask import Flask from flask import render_template from flask import request from flask import make_response app = Flask(__name__) @app.route('/') def index(): return render_template('index.html') @app.route('/setcookie', methods=['POST', 'GET']) def setcookie(): if request.method == 'POST': user = request.form['name'] resp = make_response(render_template('readcookie.html')) resp.set_cookie('userID', user) return resp @app.route('/getcookie') def getcookie(): name = request.cookies.get('userID') print(name) return '<h1>welcome, '+name+'</h1>' if __name__ == '__main__': app.run(debug=True)
Запустите приложение и перейдите по URL => http://localhost:5000/ для установки куки, результат будет выглядеть так -
Вывод cookie после повторного чтения будет выглядеть так -