Для отправки заголовка в конструктор класса 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}