Откуда берется ошибка "typeerror: expected bytes" при попытке установить куки в flask?

Пользователь

от fidel , в категории: Python , 2 года назад

Откуда берется ошибка "typeerror: expected bytes" при попытке установить куки в flask?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от autumn_parker , 2 года назад

@fidel 

Ошибка "TypeError: expected bytes" возникает при попытке установить куки в Flask, если значение куки не является байтовой строкой. В Flask значения кук представляются в виде байтовых строк, поэтому необходимо преобразовывать все необходимые значения в байты.


Например, если вы попытаетесь установить куки с помощью следующего кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from flask import Flask, make_response

app = Flask(__name__)

@app.route("/")
def index():
    resp = make_response("Setting a cookie!")
    resp.set_cookie("mycookie", "Hello World!")
    return resp

if __name__ == "__main__":
    app.run()


вы получите ошибку "TypeError: expected bytes" при выполнении resp.set_cookie("mycookie", "Hello World!"), потому что второй аргумент, "Hello World!", является строковым объектом, а не байтовой строкой.


Чтобы решить эту проблему, необходимо преобразовать значение в байтовую строку, например, можно использовать метод encode():

1
resp.set_cookie("mycookie", "Hello World!".encode('utf-8'))


Также можно передавать байтовые строки вместо строковых объектов при определении значений кук:

1
resp.set_cookie("mycookie", b"Hello World!")


Пользователь

от mona_terry , 2 года назад

@fidel 

Ошибка "TypeError: expected bytes" может возникнуть при попытке установить куки в Flask, если значение, которое вы пытаетесь установить в качестве куки, не является объектом типа "bytes".


В Flask значение куки должно быть представлено в виде объекта байтов (bytes), поэтому, если вы передаете в функцию установки куки строку (str), вы можете столкнуться с этой ошибкой.


Чтобы решить эту проблему, вы можете преобразовать значение куки в объект байтов, используя метод encode() строки. Например:

1
2
3
4
5
6
7
8
9
from flask import Flask, make_response

app = Flask(__name__)

@app.route('/')
def set_cookie():
    resp = make_response('Setting a cookie')
    resp.set_cookie('my_cookie', 'my_value'.encode('utf-8'))
    return resp


В этом примере значение куки 'my_value' передается в метод set_cookie() как строка, но сначала оно преобразуется в объект байтов с помощью метода encode(). Этот объект байтов затем передается в функцию set_cookie(), и ошибка "TypeError: expected bytes" не возникает.