Для установки куки на сервере у объекта Response и его классов-наследников применяется метод set_cookie(). Этот метод принимает ряд параметров:
key: ключ или имя куки. Обязательный параметр
value: значение куки, значение по умолчанию - пустая строка
max_age: максимальное время жизни куки в секундах. Это может быть либо число, либо значение None
(ограничивает время жизни куки текущей сессией браузера, является значением по умолчанию).
expires: когда истекает действие куки. Это может быть либо число, либо значение None
(ограничивает время жизни куки текущей сессией браузера, является значением по умолчанию).
path: путь, для которого устанавливаются куки. Значение по умолчанию - корень веб-приложения "/"
domain: домен, к которому применяются куки. значение по умолчанию None
secure: устанавливает используемый протокол. Так, если имеет значение True
, то куки будут посылаться на сервер только в запросе по
протоколу https. Значение по умолчанию False
httponly: устанавлиет доступность для скриптов javascript на клиенте. Так, значение True
предотвращает доступ к куки из кода javascript
на клиенте. Значение по умолчанию False
samesite: устанавливает разрешения на отправку куки в кроссдоменных запросах. Так, значение lax
(значение по умолчанию) указывают браузеру не посылать куки
в кроссдоменных запросах.
Установим куку, которую назовем "last_visit":
from fastapi import FastAPI, Response from datetime import datetime app = FastAPI() @app.get("/") def root(response: Response): now = datetime.now() # получаем текущую дату и время response.set_cookie(key="last_visit", value=now) return {"message": "куки установлены"}
В данном случае кука "last_visit" представляет дату последнего визита и хранит текущую дату. Затем в браузере через инструменты разработчика мы можем увидеть параметры этой куки.
В примере выше объект Response передавался в качестве параметра. Но также можно установить куку и с помощью явно созданного объекта Response:
from fastapi import FastAPI from fastapi.responses import JSONResponse from datetime import datetime app = FastAPI() @app.get("/") def root(): now = datetime.now() # получаем текущую дату и время response = JSONResponse(content={"message": "куки установлены"}) response.set_cookie(key="last_visit", value=now) return response
Для получения куки на сервере применяется класс fastapi.Cookie. Например, получим выше установленную куку "last_visit":
from fastapi import FastAPI, Cookie app = FastAPI() @app.get("/") def root(last_visit = Cookie()): return {"last visit": last_visit}
Для получения куки определяется параметр с именем куки, которому присваивается объект Cookie.
В примере выше куки была обязательна. Если ее нет в запросе, приложение выдало бы ошибку. Чтобы избежать этого, мы можем определить значение по умолчанию, в том числе None:
from fastapi import FastAPI, Cookie app = FastAPI() @app.get("/") def root(last_visit: str | None = Cookie(default=None)): if last_visit == None: return {"message": "Это ваш первый визит на сайт"} else: return {"message": f"Ваш последний визит: {last_visit}"}