Для отправки заголовка в конструктор класса Response или его наследников параметру headers
передается словарь, где ключи представляют названия заголовков:
from fastapi import FastAPI, Response app = FastAPI() @app.get("/") def root(): data = "Hello METANIT.COM" return Response(content=data, media_type="text/plain", headers={"Secret-Code" : "123459"})
Для примера в данном случае клиенту отправляется кастомный заголовок "Secret-Code" со значением "123459":
Также можно задать заголовки с помощью атрибута headers, который есть у класса Response и его наследников. Данный атрибут фактически представляет словарь, где ключи - названия заголовков:
from fastapi import FastAPI, Response app = FastAPI() @app.get("/") def root(response: Response): response.headers["Secret-Code"] = "123459" return {"message": "Hello METANIT.COM"}
При данном подходе объект Response явным образом передается в функцию-обработчик через параметр.
Для получения заголовков запроса применяется класс fastapi.Header. Например, получим заголовок User-Agent
:
from fastapi import FastAPI, Header app = FastAPI() @app.get("/") def root(user_agent: str = Header()): return {"User-Agent": user_agent}
При этом параметр функции, в который получаем значение заголовка, должен называться как и заголовок за тем исключением, что вместо дефиса применяется прочерк: параметр "user_agent" соответствует заголовку "User-Agent".
Но в запросе может отсутствовать нужный заголовок. В этом случае мы можем установить для него значение по умолчанию, например, None
from fastapi import FastAPI, Header app = FastAPI() @app.get("/") def root(secret_code: str | None = Header(default=None)): return {"Secret-Code": secret_code}