English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Обработка куки Flask

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 после повторного чтения будет выглядеть так -