Custom Response Classes - File, HTML, Redirect, Streaming, etc.
There are several custom response classes you can use to create an instance and return them directly from your path operations.
Read more about it in the FastAPI docs for Custom Response - HTML, Stream, File, others.
You can import them directly from fastapi.responses
:
from fastapi.responses import (
FileResponse,
HTMLResponse,
JSONResponse,
ORJSONResponse,
PlainTextResponse,
RedirectResponse,
Response,
StreamingResponse,
UJSONResponse,
)
FastAPI Responses
There are a couple of custom FastAPI response classes, you can use them to optimize JSON performance.
fastapi.responses.UJSONResponse
UJSONResponse(
content,
status_code=200,
headers=None,
media_type=None,
background=None,
)
Bases: [JSONResponse](#fastapi.responses.JSONResponse "starlette.responses.JSONResponse")
JSON response using the high-performance ujson library to serialize data to JSON.
Read more about it in the FastAPI docs for Custom Response - HTML, Stream, File, others.
PARAMETER | DESCRIPTION |
---|
content | TYPE: Any |
status_code | TYPE: int DEFAULT: 200 |
headers | TYPE: Optional[Dict[str, str]] DEFAULT: None |
media_type | TYPE: Optional[str] DEFAULT: None |
background | TYPE: Optional[BackgroundTask] DEFAULT: None |
Source code in starlette/responses.py
188 189 190 191 192 193 194 195 196
| def init( self, content: typing.Any, statuscode: int = 200, headers: typing.Optional[typing.Dict[str, str]] = None, mediatype: typing.Optional[str] = None, background: typing.Optional[BackgroundTask] = None, ) -> None: super().__init(content, status_code, headers, media_type, background)
|
charset class-attribute
instance-attribute
charset = 'utf-8'
status_code instance-attribute
status_code = status_code
media_type = 'application/json'
body instance-attribute
body = render(content)
background instance-attribute
background = background
headers
render
render(content)
PARAMETER | DESCRIPTION |
---|
content | TYPE: Any |
Source code in fastapi/responses.py
| def render(self, content: Any) -> bytes: assert ujson is not None, “ujson must be installed to use UJSONResponse” return ujson.dumps(content, ensure_ascii=False).encode(“utf-8”)
|
init_headers(headers=None)
PARAMETER | DESCRIPTION |
---|
headers | TYPE: Optional[Mapping[str, str]] DEFAULT: None |
Source code in starlette/responses.py
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| def init_headers( self, headers: typing.Optional[typing.Mapping[str, str]] = None ) -> None: if headers is None: raw_headers: typing.List[typing.Tuple[bytes, bytes]] = [] populate_content_length = True populate_content_type = True else: raw_headers = [ (k.lower().encode(“latin-1”), v.encode(“latin-1”)) for k, v in headers.items() ] keys = [h[0] for h in raw_headers] populate_content_length = b“content-length” not in keys populate_content_type = b“content-type” not in keys
body = getattr(self, “body”, None) if ( body is not None and populate_content_length and not (self.status_code < 200 or self.status_code in (204, 304)) ): content_length = str(len(body)) raw_headers.append((b“content-length”, content_length.encode(“latin-1”)))
content_type = self.media_type if content_type is not None and populate_content_type: if content_type.startswith(“text/“): content_type += “; charset=” + self.charset raw_headers.append((b“content-type”, content_type.encode(“latin-1”)))
self.raw_headers = raw_headers
|
set_cookie
set_cookie(
key,
value="",
max_age=None,
expires=None,
path="/",
domain=None,
secure=False,
httponly=False,
samesite="lax",
)
PARAMETER | DESCRIPTION |
---|
key | TYPE: str |
value | TYPE: str DEFAULT: ‘’ |
max_age | TYPE: Optional[int] DEFAULT: None |
expires | TYPE: Optional[Union[datetime, str, int]] DEFAULT: None |
path | TYPE: str DEFAULT: ‘/‘ |
domain | TYPE: Optional[str] DEFAULT: None |
secure | TYPE: bool DEFAULT: False |
httponly | TYPE: bool DEFAULT: False |
samesite | TYPE: Optional[Literal[‘lax’, ‘strict’, ‘none’]] DEFAULT: ‘lax’ |
Source code in starlette/responses.py
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
| def set_cookie( self, key: str, value: str = “”, max_age: typing.Optional[int] = None, expires: typing.Optional[typing.Union[datetime, str, int]] = None, path: str = “/“, domain: typing.Optional[str] = None, secure: bool = False, httponly: bool = False, samesite: typing.Optional[Literal[“lax”, “strict”, “none”]] = “lax”, ) -> None: cookie: “http.cookies.BaseCookie[str]” = http.cookies.SimpleCookie() cookie[key] = value if max_age is not None: cookie[key][“max-age”] = max_age if expires is not None: if isinstance(expires, datetime): cookie[key][“expires”] = format_datetime(expires, usegmt=True) else: cookie[key][“expires”] = expires if path is not None: cookie[key][“path”] = path if domain is not None: cookie[key][“domain”] = domain if secure: cookie[key][“secure”] = True if httponly: cookie[key][“httponly”] = True if samesite is not None: assert samesite.lower() in [ “strict”, “lax”, “none”, ], “samesite must be either ‘strict’, ‘lax’ or ‘none’” cookie[key][“samesite”] = samesite cookie_val = cookie.output(header=“”).strip() self.raw_headers.append((b“set-cookie”, cookie_val.encode(“latin-1”)))
|
delete_cookie
delete_cookie(
key,
path="/",
domain=None,
secure=False,
httponly=False,
samesite="lax",
)
PARAMETER | DESCRIPTION |
---|
key | TYPE: str |
path | TYPE: str DEFAULT: ‘/‘ |
domain | TYPE: Optional[str] DEFAULT: None |
secure | TYPE: bool DEFAULT: False |
httponly | TYPE: bool DEFAULT: False |
samesite | TYPE: Optional[Literal[‘lax’, ‘strict’, ‘none’]] DEFAULT: ‘lax’ |
Source code in starlette/responses.py
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
| def delete_cookie( self, key: str, path: str = “/“, domain: typing.Optional[str] = None, secure: bool = False, httponly: bool = False, samesite: typing.Optional[Literal[“lax”, “strict”, “none”]] = “lax”, ) -> None: self.set_cookie( key, max_age=0, expires=0, path=path, domain=domain, secure=secure, httponly=httponly, samesite=samesite, )
|
fastapi.responses.ORJSONResponse
ORJSONResponse(
content,
status_code=200,
headers=None,
media_type=None,
background=None,
)
Bases: [JSONResponse](#fastapi.responses.JSONResponse "starlette.responses.JSONResponse")
JSON response using the high-performance orjson library to serialize data to JSON.
Read more about it in the FastAPI docs for Custom Response - HTML, Stream, File, others.
PARAMETER | DESCRIPTION |
---|
content | TYPE: Any |
status_code | TYPE: int DEFAULT: 200 |
headers | TYPE: Optional[Dict[str, str]] DEFAULT: None |
media_type | TYPE: Optional[str] DEFAULT: None |
background | TYPE: Optional[BackgroundTask] DEFAULT: None |
Source code in starlette/responses.py
188 189 190 191 192 193 194 195 196
| def init( self, content: typing.Any, statuscode: int = 200, headers: typing.Optional[typing.Dict[str, str]] = None, mediatype: typing.Optional[str] = None, background: typing.Optional[BackgroundTask] = None, ) -> None: super().__init(content, status_code, headers, media_type, background)
|
charset class-attribute
instance-attribute
charset = 'utf-8'
status_code instance-attribute
status_code = status_code
media_type = 'application/json'
body instance-attribute
body = render(content)
background instance-attribute
background = background
headers
render
render(content)
PARAMETER | DESCRIPTION |
---|
content | TYPE: Any |
Source code in fastapi/responses.py
| def render(self, content: Any) -> bytes: assert orjson is not None, “orjson must be installed to use ORJSONResponse” return orjson.dumps( content, option=orjson.OPT_NON_STR_KEYS | orjson.OPT_SERIALIZE_NUMPY )
|
init_headers(headers=None)
PARAMETER | DESCRIPTION |
---|
headers | TYPE: Optional[Mapping[str, str]] DEFAULT: None |
Source code in starlette/responses.py
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| def init_headers( self, headers: typing.Optional[typing.Mapping[str, str]] = None ) -> None: if headers is None: raw_headers: typing.List[typing.Tuple[bytes, bytes]] = [] populate_content_length = True populate_content_type = True else: raw_headers = [ (k.lower().encode(“latin-1”), v.encode(“latin-1”)) for k, v in headers.items() ] keys = [h[0] for h in raw_headers] populate_content_length = b“content-length” not in keys populate_content_type = b“content-type” not in keys
body = getattr(self, “body”, None) if ( body is not None and populate_content_length and not (self.status_code < 200 or self.status_code in (204, 304)) ): content_length = str(len(body)) raw_headers.append((b“content-length”, content_length.encode(“latin-1”)))
content_type = self.media_type if content_type is not None and populate_content_type: if content_type.startswith(“text/“): content_type += “; charset=” + self.charset raw_headers.append((b“content-type”, content_type.encode(“latin-1”)))
self.raw_headers = raw_headers
|
set_cookie
set_cookie(
key,
value="",
max_age=None,
expires=None,
path="/",
domain=None,
secure=False,
httponly=False,
samesite="lax",
)
PARAMETER | DESCRIPTION |
---|
key | TYPE: str |
value | TYPE: str DEFAULT: ‘’ |
max_age | TYPE: Optional[int] DEFAULT: None |
expires | TYPE: Optional[Union[datetime, str, int]] DEFAULT: None |
path | TYPE: str DEFAULT: ‘/‘ |
domain | TYPE: Optional[str] DEFAULT: None |
secure | TYPE: bool DEFAULT: False |
httponly | TYPE: bool DEFAULT: False |
samesite | TYPE: Optional[Literal[‘lax’, ‘strict’, ‘none’]] DEFAULT: ‘lax’ |
Source code in starlette/responses.py
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
| def set_cookie( self, key: str, value: str = “”, max_age: typing.Optional[int] = None, expires: typing.Optional[typing.Union[datetime, str, int]] = None, path: str = “/“, domain: typing.Optional[str] = None, secure: bool = False, httponly: bool = False, samesite: typing.Optional[Literal[“lax”, “strict”, “none”]] = “lax”, ) -> None: cookie: “http.cookies.BaseCookie[str]” = http.cookies.SimpleCookie() cookie[key] = value if max_age is not None: cookie[key][“max-age”] = max_age if expires is not None: if isinstance(expires, datetime): cookie[key][“expires”] = format_datetime(expires, usegmt=True) else: cookie[key][“expires”] = expires if path is not None: cookie[key][“path”] = path if domain is not None: cookie[key][“domain”] = domain if secure: cookie[key][“secure”] = True if httponly: cookie[key][“httponly”] = True if samesite is not None: assert samesite.lower() in [ “strict”, “lax”, “none”, ], “samesite must be either ‘strict’, ‘lax’ or ‘none’” cookie[key][“samesite”] = samesite cookie_val = cookie.output(header=“”).strip() self.raw_headers.append((b“set-cookie”, cookie_val.encode(“latin-1”)))
|
delete_cookie
delete_cookie(
key,
path="/",
domain=None,
secure=False,
httponly=False,
samesite="lax",
)
PARAMETER | DESCRIPTION |
---|
key | TYPE: str |
path | TYPE: str DEFAULT: ‘/‘ |
domain | TYPE: Optional[str] DEFAULT: None |
secure | TYPE: bool DEFAULT: False |
httponly | TYPE: bool DEFAULT: False |
samesite | TYPE: Optional[Literal[‘lax’, ‘strict’, ‘none’]] DEFAULT: ‘lax’ |
Source code in starlette/responses.py
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
| def delete_cookie( self, key: str, path: str = “/“, domain: typing.Optional[str] = None, secure: bool = False, httponly: bool = False, samesite: typing.Optional[Literal[“lax”, “strict”, “none”]] = “lax”, ) -> None: self.set_cookie( key, max_age=0, expires=0, path=path, domain=domain, secure=secure, httponly=httponly, samesite=samesite, )
|
Starlette Responses
fastapi.responses.FileResponse
FileResponse(
path,
status_code=200,
headers=None,
media_type=None,
background=None,
filename=None,
stat_result=None,
method=None,
content_disposition_type="attachment",
)
Bases: [Response](#fastapi.responses.Response "starlette.responses.Response")
PARAMETER | DESCRIPTION |
---|
path | TYPE: Union[str, PathLike[str]] |
status_code | TYPE: int DEFAULT: 200 |
headers | TYPE: Optional[Mapping[str, str]] DEFAULT: None |
media_type | TYPE: Optional[str] DEFAULT: None |
background | TYPE: Optional[BackgroundTask] DEFAULT: None |
filename | TYPE: Optional[str] DEFAULT: None |
stat_result | TYPE: Optional[stat_result] DEFAULT: None |
method | TYPE: Optional[str] DEFAULT: None |
content_disposition_type | TYPE: str DEFAULT: ‘attachment’ |
Source code in starlette/responses.py
286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320
| def init( self, path: typing.Union[str, “os.PathLike[str]”], status_code: int = 200, headers: typing.Optional[typing.Mapping[str, str]] = None, media_type: typing.Optional[str] = None, background: typing.Optional[BackgroundTask] = None, filename: typing.Optional[str] = None, stat_result: typing.Optional[os.stat_result] = None, method: typing.Optional[str] = None, content_disposition_type: str = “attachment”, ) -> None: self.path = path self.status_code = status_code self.filename = filename self.send_header_only = method is not None and method.upper() == “HEAD” if media_type is None: media_type = guess_type(filename or path)[0] or “text/plain” self.media_type = media_type self.background = background self.init_headers(headers) if self.filename is not None: content_disposition_filename = quote(self.filename) if content_disposition_filename != self.filename: content_disposition = “{}; filename*=utf-8’’{}“.format( content_disposition_type, content_disposition_filename ) else: content_disposition = ‘{}; filename=”{}“‘.format( content_disposition_type, self.filename ) self.headers.setdefault(“content-disposition”, content_disposition) self.stat_result = stat_result if stat_result is not None: self.set_stat_headers(stat_result)
|
chunk_size class-attribute
instance-attribute
chunk_size = 64 * 1024
charset class-attribute
instance-attribute
charset = 'utf-8'
status_code instance-attribute
status_code = status_code
media_type = media_type
body instance-attribute
body = render(content)
background instance-attribute
background = background
headers
render
render(content)
PARAMETER | DESCRIPTION |
---|
content | TYPE: Any |
Source code in starlette/responses.py
| def render(self, content: typing.Any) -> bytes: if content is None: return b“” if isinstance(content, bytes): return content return content.encode(self.charset)
|
init_headers(headers=None)
PARAMETER | DESCRIPTION |
---|
headers | TYPE: Optional[Mapping[str, str]] DEFAULT: None |
Source code in starlette/responses.py
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| def init_headers( self, headers: typing.Optional[typing.Mapping[str, str]] = None ) -> None: if headers is None: raw_headers: typing.List[typing.Tuple[bytes, bytes]] = [] populate_content_length = True populate_content_type = True else: raw_headers = [ (k.lower().encode(“latin-1”), v.encode(“latin-1”)) for k, v in headers.items() ] keys = [h[0] for h in raw_headers] populate_content_length = b“content-length” not in keys populate_content_type = b“content-type” not in keys
body = getattr(self, “body”, None) if ( body is not None and populate_content_length and not (self.status_code < 200 or self.status_code in (204, 304)) ): content_length = str(len(body)) raw_headers.append((b“content-length”, content_length.encode(“latin-1”)))
content_type = self.media_type if content_type is not None and populate_content_type: if content_type.startswith(“text/“): content_type += “; charset=” + self.charset raw_headers.append((b“content-type”, content_type.encode(“latin-1”)))
self.raw_headers = raw_headers
|
set_cookie
set_cookie(
key,
value="",
max_age=None,
expires=None,
path="/",
domain=None,
secure=False,
httponly=False,
samesite="lax",
)
PARAMETER | DESCRIPTION |
---|
key | TYPE: str |
value | TYPE: str DEFAULT: ‘’ |
max_age | TYPE: Optional[int] DEFAULT: None |
expires | TYPE: Optional[Union[datetime, str, int]] DEFAULT: None |
path | TYPE: str DEFAULT: ‘/‘ |
domain | TYPE: Optional[str] DEFAULT: None |
secure | TYPE: bool DEFAULT: False |
httponly | TYPE: bool DEFAULT: False |
samesite | TYPE: Optional[Literal[‘lax’, ‘strict’, ‘none’]] DEFAULT: ‘lax’ |
Source code in starlette/responses.py
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
| def set_cookie( self, key: str, value: str = “”, max_age: typing.Optional[int] = None, expires: typing.Optional[typing.Union[datetime, str, int]] = None, path: str = “/“, domain: typing.Optional[str] = None, secure: bool = False, httponly: bool = False, samesite: typing.Optional[Literal[“lax”, “strict”, “none”]] = “lax”, ) -> None: cookie: “http.cookies.BaseCookie[str]” = http.cookies.SimpleCookie() cookie[key] = value if max_age is not None: cookie[key][“max-age”] = max_age if expires is not None: if isinstance(expires, datetime): cookie[key][“expires”] = format_datetime(expires, usegmt=True) else: cookie[key][“expires”] = expires if path is not None: cookie[key][“path”] = path if domain is not None: cookie[key][“domain”] = domain if secure: cookie[key][“secure”] = True if httponly: cookie[key][“httponly”] = True if samesite is not None: assert samesite.lower() in [ “strict”, “lax”, “none”, ], “samesite must be either ‘strict’, ‘lax’ or ‘none’” cookie[key][“samesite”] = samesite cookie_val = cookie.output(header=“”).strip() self.raw_headers.append((b“set-cookie”, cookie_val.encode(“latin-1”)))
|
delete_cookie
delete_cookie(
key,
path="/",
domain=None,
secure=False,
httponly=False,
samesite="lax",
)
PARAMETER | DESCRIPTION |
---|
key | TYPE: str |
path | TYPE: str DEFAULT: ‘/‘ |
domain | TYPE: Optional[str] DEFAULT: None |
secure | TYPE: bool DEFAULT: False |
httponly | TYPE: bool DEFAULT: False |
samesite | TYPE: Optional[Literal[‘lax’, ‘strict’, ‘none’]] DEFAULT: ‘lax’ |
Source code in starlette/responses.py
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
| def delete_cookie( self, key: str, path: str = “/“, domain: typing.Optional[str] = None, secure: bool = False, httponly: bool = False, samesite: typing.Optional[Literal[“lax”, “strict”, “none”]] = “lax”, ) -> None: self.set_cookie( key, max_age=0, expires=0, path=path, domain=domain, secure=secure, httponly=httponly, samesite=samesite, )
|
fastapi.responses.HTMLResponse
HTMLResponse(
content=None,
status_code=200,
headers=None,
media_type=None,
background=None,
)
Bases: [Response](#fastapi.responses.Response "starlette.responses.Response")
PARAMETER | DESCRIPTION |
---|
content | TYPE: Any DEFAULT: None |
status_code | TYPE: int DEFAULT: 200 |
headers | TYPE: Optional[Mapping[str, str]] DEFAULT: None |
media_type | TYPE: Optional[str] DEFAULT: None |
background | TYPE: Optional[BackgroundTask] DEFAULT: None |
Source code in starlette/responses.py
43 44 45 46 47 48 49 50 51 52 53 54 55 56
| def init( self, content: typing.Any = None, status_code: int = 200, headers: typing.Optional[typing.Mapping[str, str]] = None, media_type: typing.Optional[str] = None, background: typing.Optional[BackgroundTask] = None, ) -> None: self.status_code = status_code if media_type is not None: self.media_type = media_type self.background = background self.body = self.render(content) self.init_headers(headers)
|
charset class-attribute
instance-attribute
charset = 'utf-8'
status_code instance-attribute
status_code = status_code
media_type = 'text/html'
body instance-attribute
body = render(content)
background instance-attribute
background = background
headers
render
render(content)
PARAMETER | DESCRIPTION |
---|
content | TYPE: Any |
Source code in starlette/responses.py
| def render(self, content: typing.Any) -> bytes: if content is None: return b“” if isinstance(content, bytes): return content return content.encode(self.charset)
|
init_headers(headers=None)
PARAMETER | DESCRIPTION |
---|
headers | TYPE: Optional[Mapping[str, str]] DEFAULT: None |
Source code in starlette/responses.py
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| def init_headers( self, headers: typing.Optional[typing.Mapping[str, str]] = None ) -> None: if headers is None: raw_headers: typing.List[typing.Tuple[bytes, bytes]] = [] populate_content_length = True populate_content_type = True else: raw_headers = [ (k.lower().encode(“latin-1”), v.encode(“latin-1”)) for k, v in headers.items() ] keys = [h[0] for h in raw_headers] populate_content_length = b“content-length” not in keys populate_content_type = b“content-type” not in keys
body = getattr(self, “body”, None) if ( body is not None and populate_content_length and not (self.status_code < 200 or self.status_code in (204, 304)) ): content_length = str(len(body)) raw_headers.append((b“content-length”, content_length.encode(“latin-1”)))
content_type = self.media_type if content_type is not None and populate_content_type: if content_type.startswith(“text/“): content_type += “; charset=” + self.charset raw_headers.append((b“content-type”, content_type.encode(“latin-1”)))
self.raw_headers = raw_headers
|
set_cookie
set_cookie(
key,
value="",
max_age=None,
expires=None,
path="/",
domain=None,
secure=False,
httponly=False,
samesite="lax",
)
PARAMETER | DESCRIPTION |
---|
key | TYPE: str |
value | TYPE: str DEFAULT: ‘’ |
max_age | TYPE: Optional[int] DEFAULT: None |
expires | TYPE: Optional[Union[datetime, str, int]] DEFAULT: None |
path | TYPE: str DEFAULT: ‘/‘ |
domain | TYPE: Optional[str] DEFAULT: None |
secure | TYPE: bool DEFAULT: False |
httponly | TYPE: bool DEFAULT: False |
samesite | TYPE: Optional[Literal[‘lax’, ‘strict’, ‘none’]] DEFAULT: ‘lax’ |
Source code in starlette/responses.py
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
| def set_cookie( self, key: str, value: str = “”, max_age: typing.Optional[int] = None, expires: typing.Optional[typing.Union[datetime, str, int]] = None, path: str = “/“, domain: typing.Optional[str] = None, secure: bool = False, httponly: bool = False, samesite: typing.Optional[Literal[“lax”, “strict”, “none”]] = “lax”, ) -> None: cookie: “http.cookies.BaseCookie[str]” = http.cookies.SimpleCookie() cookie[key] = value if max_age is not None: cookie[key][“max-age”] = max_age if expires is not None: if isinstance(expires, datetime): cookie[key][“expires”] = format_datetime(expires, usegmt=True) else: cookie[key][“expires”] = expires if path is not None: cookie[key][“path”] = path if domain is not None: cookie[key][“domain”] = domain if secure: cookie[key][“secure”] = True if httponly: cookie[key][“httponly”] = True if samesite is not None: assert samesite.lower() in [ “strict”, “lax”, “none”, ], “samesite must be either ‘strict’, ‘lax’ or ‘none’” cookie[key][“samesite”] = samesite cookie_val = cookie.output(header=“”).strip() self.raw_headers.append((b“set-cookie”, cookie_val.encode(“latin-1”)))
|
delete_cookie
delete_cookie(
key,
path="/",
domain=None,
secure=False,
httponly=False,
samesite="lax",
)
PARAMETER | DESCRIPTION |
---|
key | TYPE: str |
path | TYPE: str DEFAULT: ‘/‘ |
domain | TYPE: Optional[str] DEFAULT: None |
secure | TYPE: bool DEFAULT: False |
httponly | TYPE: bool DEFAULT: False |
samesite | TYPE: Optional[Literal[‘lax’, ‘strict’, ‘none’]] DEFAULT: ‘lax’ |
Source code in starlette/responses.py
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
| def delete_cookie( self, key: str, path: str = “/“, domain: typing.Optional[str] = None, secure: bool = False, httponly: bool = False, samesite: typing.Optional[Literal[“lax”, “strict”, “none”]] = “lax”, ) -> None: self.set_cookie( key, max_age=0, expires=0, path=path, domain=domain, secure=secure, httponly=httponly, samesite=samesite, )
|
fastapi.responses.JSONResponse
JSONResponse(
content,
status_code=200,
headers=None,
media_type=None,
background=None,
)
Bases: [Response](#fastapi.responses.Response "starlette.responses.Response")
PARAMETER | DESCRIPTION |
---|
content | TYPE: Any |
status_code | TYPE: int DEFAULT: 200 |
headers | TYPE: Optional[Dict[str, str]] DEFAULT: None |
media_type | TYPE: Optional[str] DEFAULT: None |
background | TYPE: Optional[BackgroundTask] DEFAULT: None |
Source code in starlette/responses.py
188 189 190 191 192 193 194 195 196
| def init( self, content: typing.Any, statuscode: int = 200, headers: typing.Optional[typing.Dict[str, str]] = None, mediatype: typing.Optional[str] = None, background: typing.Optional[BackgroundTask] = None, ) -> None: super().__init(content, status_code, headers, media_type, background)
|
charset class-attribute
instance-attribute
charset = 'utf-8'
status_code instance-attribute
status_code = status_code
media_type = 'application/json'
body instance-attribute
body = render(content)
background instance-attribute
background = background
headers
render
render(content)
PARAMETER | DESCRIPTION |
---|
content | TYPE: Any |
Source code in starlette/responses.py
| def render(self, content: typing.Any) -> bytes: return json.dumps( content, ensure_ascii=False, allow_nan=False, indent=None, separators=(“,”, “:”), ).encode(“utf-8”)
|
init_headers(headers=None)
PARAMETER | DESCRIPTION |
---|
headers | TYPE: Optional[Mapping[str, str]] DEFAULT: None |
Source code in starlette/responses.py
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| def init_headers( self, headers: typing.Optional[typing.Mapping[str, str]] = None ) -> None: if headers is None: raw_headers: typing.List[typing.Tuple[bytes, bytes]] = [] populate_content_length = True populate_content_type = True else: raw_headers = [ (k.lower().encode(“latin-1”), v.encode(“latin-1”)) for k, v in headers.items() ] keys = [h[0] for h in raw_headers] populate_content_length = b“content-length” not in keys populate_content_type = b“content-type” not in keys
body = getattr(self, “body”, None) if ( body is not None and populate_content_length and not (self.status_code < 200 or self.status_code in (204, 304)) ): content_length = str(len(body)) raw_headers.append((b“content-length”, content_length.encode(“latin-1”)))
content_type = self.media_type if content_type is not None and populate_content_type: if content_type.startswith(“text/“): content_type += “; charset=” + self.charset raw_headers.append((b“content-type”, content_type.encode(“latin-1”)))
self.raw_headers = raw_headers
|
set_cookie
set_cookie(
key,
value="",
max_age=None,
expires=None,
path="/",
domain=None,
secure=False,
httponly=False,
samesite="lax",
)
PARAMETER | DESCRIPTION |
---|
key | TYPE: str |
value | TYPE: str DEFAULT: ‘’ |
max_age | TYPE: Optional[int] DEFAULT: None |
expires | TYPE: Optional[Union[datetime, str, int]] DEFAULT: None |
path | TYPE: str DEFAULT: ‘/‘ |
domain | TYPE: Optional[str] DEFAULT: None |
secure | TYPE: bool DEFAULT: False |
httponly | TYPE: bool DEFAULT: False |
samesite | TYPE: Optional[Literal[‘lax’, ‘strict’, ‘none’]] DEFAULT: ‘lax’ |
Source code in starlette/responses.py
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
| def set_cookie( self, key: str, value: str = “”, max_age: typing.Optional[int] = None, expires: typing.Optional[typing.Union[datetime, str, int]] = None, path: str = “/“, domain: typing.Optional[str] = None, secure: bool = False, httponly: bool = False, samesite: typing.Optional[Literal[“lax”, “strict”, “none”]] = “lax”, ) -> None: cookie: “http.cookies.BaseCookie[str]” = http.cookies.SimpleCookie() cookie[key] = value if max_age is not None: cookie[key][“max-age”] = max_age if expires is not None: if isinstance(expires, datetime): cookie[key][“expires”] = format_datetime(expires, usegmt=True) else: cookie[key][“expires”] = expires if path is not None: cookie[key][“path”] = path if domain is not None: cookie[key][“domain”] = domain if secure: cookie[key][“secure”] = True if httponly: cookie[key][“httponly”] = True if samesite is not None: assert samesite.lower() in [ “strict”, “lax”, “none”, ], “samesite must be either ‘strict’, ‘lax’ or ‘none’” cookie[key][“samesite”] = samesite cookie_val = cookie.output(header=“”).strip() self.raw_headers.append((b“set-cookie”, cookie_val.encode(“latin-1”)))
|
delete_cookie
delete_cookie(
key,
path="/",
domain=None,
secure=False,
httponly=False,
samesite="lax",
)
PARAMETER | DESCRIPTION |
---|
key | TYPE: str |
path | TYPE: str DEFAULT: ‘/‘ |
domain | TYPE: Optional[str] DEFAULT: None |
secure | TYPE: bool DEFAULT: False |
httponly | TYPE: bool DEFAULT: False |
samesite | TYPE: Optional[Literal[‘lax’, ‘strict’, ‘none’]] DEFAULT: ‘lax’ |
Source code in starlette/responses.py
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
| def delete_cookie( self, key: str, path: str = “/“, domain: typing.Optional[str] = None, secure: bool = False, httponly: bool = False, samesite: typing.Optional[Literal[“lax”, “strict”, “none”]] = “lax”, ) -> None: self.set_cookie( key, max_age=0, expires=0, path=path, domain=domain, secure=secure, httponly=httponly, samesite=samesite, )
|
fastapi.responses.PlainTextResponse
PlainTextResponse(
content=None,
status_code=200,
headers=None,
media_type=None,
background=None,
)
Bases: [Response](#fastapi.responses.Response "starlette.responses.Response")
PARAMETER | DESCRIPTION |
---|
content | TYPE: Any DEFAULT: None |
status_code | TYPE: int DEFAULT: 200 |
headers | TYPE: Optional[Mapping[str, str]] DEFAULT: None |
media_type | TYPE: Optional[str] DEFAULT: None |
background | TYPE: Optional[BackgroundTask] DEFAULT: None |
Source code in starlette/responses.py
43 44 45 46 47 48 49 50 51 52 53 54 55 56
| def init( self, content: typing.Any = None, status_code: int = 200, headers: typing.Optional[typing.Mapping[str, str]] = None, media_type: typing.Optional[str] = None, background: typing.Optional[BackgroundTask] = None, ) -> None: self.status_code = status_code if media_type is not None: self.media_type = media_type self.background = background self.body = self.render(content) self.init_headers(headers)
|
charset class-attribute
instance-attribute
charset = 'utf-8'
status_code instance-attribute
status_code = status_code
media_type = 'text/plain'
body instance-attribute
body = render(content)
background instance-attribute
background = background
headers
render
render(content)
PARAMETER | DESCRIPTION |
---|
content | TYPE: Any |
Source code in starlette/responses.py
| def render(self, content: typing.Any) -> bytes: if content is None: return b“” if isinstance(content, bytes): return content return content.encode(self.charset)
|
init_headers(headers=None)
PARAMETER | DESCRIPTION |
---|
headers | TYPE: Optional[Mapping[str, str]] DEFAULT: None |
Source code in starlette/responses.py
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| def init_headers( self, headers: typing.Optional[typing.Mapping[str, str]] = None ) -> None: if headers is None: raw_headers: typing.List[typing.Tuple[bytes, bytes]] = [] populate_content_length = True populate_content_type = True else: raw_headers = [ (k.lower().encode(“latin-1”), v.encode(“latin-1”)) for k, v in headers.items() ] keys = [h[0] for h in raw_headers] populate_content_length = b“content-length” not in keys populate_content_type = b“content-type” not in keys
body = getattr(self, “body”, None) if ( body is not None and populate_content_length and not (self.status_code < 200 or self.status_code in (204, 304)) ): content_length = str(len(body)) raw_headers.append((b“content-length”, content_length.encode(“latin-1”)))
content_type = self.media_type if content_type is not None and populate_content_type: if content_type.startswith(“text/“): content_type += “; charset=” + self.charset raw_headers.append((b“content-type”, content_type.encode(“latin-1”)))
self.raw_headers = raw_headers
|
set_cookie
set_cookie(
key,
value="",
max_age=None,
expires=None,
path="/",
domain=None,
secure=False,
httponly=False,
samesite="lax",
)
PARAMETER | DESCRIPTION |
---|
key | TYPE: str |
value | TYPE: str DEFAULT: ‘’ |
max_age | TYPE: Optional[int] DEFAULT: None |
expires | TYPE: Optional[Union[datetime, str, int]] DEFAULT: None |
path | TYPE: str DEFAULT: ‘/‘ |
domain | TYPE: Optional[str] DEFAULT: None |
secure | TYPE: bool DEFAULT: False |
httponly | TYPE: bool DEFAULT: False |
samesite | TYPE: Optional[Literal[‘lax’, ‘strict’, ‘none’]] DEFAULT: ‘lax’ |
Source code in starlette/responses.py
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
| def set_cookie( self, key: str, value: str = “”, max_age: typing.Optional[int] = None, expires: typing.Optional[typing.Union[datetime, str, int]] = None, path: str = “/“, domain: typing.Optional[str] = None, secure: bool = False, httponly: bool = False, samesite: typing.Optional[Literal[“lax”, “strict”, “none”]] = “lax”, ) -> None: cookie: “http.cookies.BaseCookie[str]” = http.cookies.SimpleCookie() cookie[key] = value if max_age is not None: cookie[key][“max-age”] = max_age if expires is not None: if isinstance(expires, datetime): cookie[key][“expires”] = format_datetime(expires, usegmt=True) else: cookie[key][“expires”] = expires if path is not None: cookie[key][“path”] = path if domain is not None: cookie[key][“domain”] = domain if secure: cookie[key][“secure”] = True if httponly: cookie[key][“httponly”] = True if samesite is not None: assert samesite.lower() in [ “strict”, “lax”, “none”, ], “samesite must be either ‘strict’, ‘lax’ or ‘none’” cookie[key][“samesite”] = samesite cookie_val = cookie.output(header=“”).strip() self.raw_headers.append((b“set-cookie”, cookie_val.encode(“latin-1”)))
|
delete_cookie
delete_cookie(
key,
path="/",
domain=None,
secure=False,
httponly=False,
samesite="lax",
)
PARAMETER | DESCRIPTION |
---|
key | TYPE: str |
path | TYPE: str DEFAULT: ‘/‘ |
domain | TYPE: Optional[str] DEFAULT: None |
secure | TYPE: bool DEFAULT: False |
httponly | TYPE: bool DEFAULT: False |
samesite | TYPE: Optional[Literal[‘lax’, ‘strict’, ‘none’]] DEFAULT: ‘lax’ |
Source code in starlette/responses.py
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
| def delete_cookie( self, key: str, path: str = “/“, domain: typing.Optional[str] = None, secure: bool = False, httponly: bool = False, samesite: typing.Optional[Literal[“lax”, “strict”, “none”]] = “lax”, ) -> None: self.set_cookie( key, max_age=0, expires=0, path=path, domain=domain, secure=secure, httponly=httponly, samesite=samesite, )
|
fastapi.responses.RedirectResponse
RedirectResponse(
url, status_code=307, headers=None, background=None
)
Bases: [Response](#fastapi.responses.Response "starlette.responses.Response")
PARAMETER | DESCRIPTION |
---|
url | TYPE: Union[str, URL] |
status_code | TYPE: int DEFAULT: 307 |
headers | TYPE: Optional[Mapping[str, str]] DEFAULT: None |
background | TYPE: Optional[BackgroundTask] DEFAULT: None |
Source code in starlette/responses.py
209 210 211 212 213 214 215 216 217 218 219
| def init( self, url: typing.Union[str, URL], statuscode: int = 307, headers: typing.Optional[typing.Mapping[str, str]] = None, background: typing.Optional[BackgroundTask] = None, ) -> None: super()._init( content=b“”, status_code=status_code, headers=headers, background=background ) self.headers[“location”] = quote(str(url), safe=“:/%#?=@[]!$&’()*+,;”)
|
charset class-attribute
instance-attribute
charset = 'utf-8'
status_code instance-attribute
status_code = status_code
media_type = None
body instance-attribute
body = render(content)
background instance-attribute
background = background
headers
render
render(content)
PARAMETER | DESCRIPTION |
---|
content | TYPE: Any |
Source code in starlette/responses.py
| def render(self, content: typing.Any) -> bytes: if content is None: return b“” if isinstance(content, bytes): return content return content.encode(self.charset)
|
init_headers(headers=None)
PARAMETER | DESCRIPTION |
---|
headers | TYPE: Optional[Mapping[str, str]] DEFAULT: None |
Source code in starlette/responses.py
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| def init_headers( self, headers: typing.Optional[typing.Mapping[str, str]] = None ) -> None: if headers is None: raw_headers: typing.List[typing.Tuple[bytes, bytes]] = [] populate_content_length = True populate_content_type = True else: raw_headers = [ (k.lower().encode(“latin-1”), v.encode(“latin-1”)) for k, v in headers.items() ] keys = [h[0] for h in raw_headers] populate_content_length = b“content-length” not in keys populate_content_type = b“content-type” not in keys
body = getattr(self, “body”, None) if ( body is not None and populate_content_length and not (self.status_code < 200 or self.status_code in (204, 304)) ): content_length = str(len(body)) raw_headers.append((b“content-length”, content_length.encode(“latin-1”)))
content_type = self.media_type if content_type is not None and populate_content_type: if content_type.startswith(“text/“): content_type += “; charset=” + self.charset raw_headers.append((b“content-type”, content_type.encode(“latin-1”)))
self.raw_headers = raw_headers
|
set_cookie
set_cookie(
key,
value="",
max_age=None,
expires=None,
path="/",
domain=None,
secure=False,
httponly=False,
samesite="lax",
)
PARAMETER | DESCRIPTION |
---|
key | TYPE: str |
value | TYPE: str DEFAULT: ‘’ |
max_age | TYPE: Optional[int] DEFAULT: None |
expires | TYPE: Optional[Union[datetime, str, int]] DEFAULT: None |
path | TYPE: str DEFAULT: ‘/‘ |
domain | TYPE: Optional[str] DEFAULT: None |
secure | TYPE: bool DEFAULT: False |
httponly | TYPE: bool DEFAULT: False |
samesite | TYPE: Optional[Literal[‘lax’, ‘strict’, ‘none’]] DEFAULT: ‘lax’ |
Source code in starlette/responses.py
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
| def set_cookie( self, key: str, value: str = “”, max_age: typing.Optional[int] = None, expires: typing.Optional[typing.Union[datetime, str, int]] = None, path: str = “/“, domain: typing.Optional[str] = None, secure: bool = False, httponly: bool = False, samesite: typing.Optional[Literal[“lax”, “strict”, “none”]] = “lax”, ) -> None: cookie: “http.cookies.BaseCookie[str]” = http.cookies.SimpleCookie() cookie[key] = value if max_age is not None: cookie[key][“max-age”] = max_age if expires is not None: if isinstance(expires, datetime): cookie[key][“expires”] = format_datetime(expires, usegmt=True) else: cookie[key][“expires”] = expires if path is not None: cookie[key][“path”] = path if domain is not None: cookie[key][“domain”] = domain if secure: cookie[key][“secure”] = True if httponly: cookie[key][“httponly”] = True if samesite is not None: assert samesite.lower() in [ “strict”, “lax”, “none”, ], “samesite must be either ‘strict’, ‘lax’ or ‘none’” cookie[key][“samesite”] = samesite cookie_val = cookie.output(header=“”).strip() self.raw_headers.append((b“set-cookie”, cookie_val.encode(“latin-1”)))
|
delete_cookie
delete_cookie(
key,
path="/",
domain=None,
secure=False,
httponly=False,
samesite="lax",
)
PARAMETER | DESCRIPTION |
---|
key | TYPE: str |
path | TYPE: str DEFAULT: ‘/‘ |
domain | TYPE: Optional[str] DEFAULT: None |
secure | TYPE: bool DEFAULT: False |
httponly | TYPE: bool DEFAULT: False |
samesite | TYPE: Optional[Literal[‘lax’, ‘strict’, ‘none’]] DEFAULT: ‘lax’ |
Source code in starlette/responses.py
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
| def delete_cookie( self, key: str, path: str = “/“, domain: typing.Optional[str] = None, secure: bool = False, httponly: bool = False, samesite: typing.Optional[Literal[“lax”, “strict”, “none”]] = “lax”, ) -> None: self.set_cookie( key, max_age=0, expires=0, path=path, domain=domain, secure=secure, httponly=httponly, samesite=samesite, )
|
fastapi.responses.Response
Response(
content=None,
status_code=200,
headers=None,
media_type=None,
background=None,
)
PARAMETER | DESCRIPTION |
---|
content | TYPE: Any DEFAULT: None |
status_code | TYPE: int DEFAULT: 200 |
headers | TYPE: Optional[Mapping[str, str]] DEFAULT: None |
media_type | TYPE: Optional[str] DEFAULT: None |
background | TYPE: Optional[BackgroundTask] DEFAULT: None |
Source code in starlette/responses.py
43 44 45 46 47 48 49 50 51 52 53 54 55 56
| def init( self, content: typing.Any = None, status_code: int = 200, headers: typing.Optional[typing.Mapping[str, str]] = None, media_type: typing.Optional[str] = None, background: typing.Optional[BackgroundTask] = None, ) -> None: self.status_code = status_code if media_type is not None: self.media_type = media_type self.background = background self.body = self.render(content) self.init_headers(headers)
|
charset class-attribute
instance-attribute
charset = 'utf-8'
status_code instance-attribute
status_code = status_code
media_type = None
body instance-attribute
body = render(content)
background instance-attribute
background = background
headers
render
render(content)
PARAMETER | DESCRIPTION |
---|
content | TYPE: Any |
Source code in starlette/responses.py
| def render(self, content: typing.Any) -> bytes: if content is None: return b“” if isinstance(content, bytes): return content return content.encode(self.charset)
|
init_headers(headers=None)
PARAMETER | DESCRIPTION |
---|
headers | TYPE: Optional[Mapping[str, str]] DEFAULT: None |
Source code in starlette/responses.py
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| def init_headers( self, headers: typing.Optional[typing.Mapping[str, str]] = None ) -> None: if headers is None: raw_headers: typing.List[typing.Tuple[bytes, bytes]] = [] populate_content_length = True populate_content_type = True else: raw_headers = [ (k.lower().encode(“latin-1”), v.encode(“latin-1”)) for k, v in headers.items() ] keys = [h[0] for h in raw_headers] populate_content_length = b“content-length” not in keys populate_content_type = b“content-type” not in keys
body = getattr(self, “body”, None) if ( body is not None and populate_content_length and not (self.status_code < 200 or self.status_code in (204, 304)) ): content_length = str(len(body)) raw_headers.append((b“content-length”, content_length.encode(“latin-1”)))
content_type = self.media_type if content_type is not None and populate_content_type: if content_type.startswith(“text/“): content_type += “; charset=” + self.charset raw_headers.append((b“content-type”, content_type.encode(“latin-1”)))
self.raw_headers = raw_headers
|
set_cookie
set_cookie(
key,
value="",
max_age=None,
expires=None,
path="/",
domain=None,
secure=False,
httponly=False,
samesite="lax",
)
PARAMETER | DESCRIPTION |
---|
key | TYPE: str |
value | TYPE: str DEFAULT: ‘’ |
max_age | TYPE: Optional[int] DEFAULT: None |
expires | TYPE: Optional[Union[datetime, str, int]] DEFAULT: None |
path | TYPE: str DEFAULT: ‘/‘ |
domain | TYPE: Optional[str] DEFAULT: None |
secure | TYPE: bool DEFAULT: False |
httponly | TYPE: bool DEFAULT: False |
samesite | TYPE: Optional[Literal[‘lax’, ‘strict’, ‘none’]] DEFAULT: ‘lax’ |
Source code in starlette/responses.py
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
| def set_cookie( self, key: str, value: str = “”, max_age: typing.Optional[int] = None, expires: typing.Optional[typing.Union[datetime, str, int]] = None, path: str = “/“, domain: typing.Optional[str] = None, secure: bool = False, httponly: bool = False, samesite: typing.Optional[Literal[“lax”, “strict”, “none”]] = “lax”, ) -> None: cookie: “http.cookies.BaseCookie[str]” = http.cookies.SimpleCookie() cookie[key] = value if max_age is not None: cookie[key][“max-age”] = max_age if expires is not None: if isinstance(expires, datetime): cookie[key][“expires”] = format_datetime(expires, usegmt=True) else: cookie[key][“expires”] = expires if path is not None: cookie[key][“path”] = path if domain is not None: cookie[key][“domain”] = domain if secure: cookie[key][“secure”] = True if httponly: cookie[key][“httponly”] = True if samesite is not None: assert samesite.lower() in [ “strict”, “lax”, “none”, ], “samesite must be either ‘strict’, ‘lax’ or ‘none’” cookie[key][“samesite”] = samesite cookie_val = cookie.output(header=“”).strip() self.raw_headers.append((b“set-cookie”, cookie_val.encode(“latin-1”)))
|
delete_cookie
delete_cookie(
key,
path="/",
domain=None,
secure=False,
httponly=False,
samesite="lax",
)
PARAMETER | DESCRIPTION |
---|
key | TYPE: str |
path | TYPE: str DEFAULT: ‘/‘ |
domain | TYPE: Optional[str] DEFAULT: None |
secure | TYPE: bool DEFAULT: False |
httponly | TYPE: bool DEFAULT: False |
samesite | TYPE: Optional[Literal[‘lax’, ‘strict’, ‘none’]] DEFAULT: ‘lax’ |
Source code in starlette/responses.py
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
| def delete_cookie(
self,
key: str,
path: str = “/“,
domain: typing.Optional[str] = None,
secure: bool = False,
httponly: bool = False,
samesite: typing.Optional[Literal[“lax”, “strict”, “none”]] = “lax”,
) -> None:
self.set_cookie(
key,
max_age=0,
expires=0,
path=path,
domain=domain,
secure=secure,
httponly=httponly,
samesite=samesite,
)
|
fastapi.responses.StreamingResponse
StreamingResponse(
content,
status_code=200,
headers=None,
media_type=None,
background=None,
)
Bases: [Response](#fastapi.responses.Response "starlette.responses.Response")
PARAMETER | DESCRIPTION |
---|
content | TYPE: ContentStream |
status_code | TYPE: int DEFAULT: 200 |
headers | TYPE: Optional[Mapping[str, str]] DEFAULT: None |
media_type | TYPE: Optional[str] DEFAULT: None |
background | TYPE: Optional[BackgroundTask] DEFAULT: None |
Source code in starlette/responses.py
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
| def init(
self,
content: ContentStream,
status_code: int = 200,
headers: typing.Optional[typing.Mapping[str, str]] = None,
media_type: typing.Optional[str] = None,
background: typing.Optional[BackgroundTask] = None,
) -> None:
if isinstance(content, typing.AsyncIterable):
self.body_iterator = content
else:
self.body_iterator = iterate_in_threadpool(content)
self.status_code = status_code
self.media_type = self.media_type if media_type is None else media_type
self.background = background
self.init_headers(headers)
|
body_iterator instance-attribute
body_iterator
charset class-attribute
instance-attribute
charset = 'utf-8'
status_code instance-attribute
status_code = status_code
media_type = (
media_type if media_type is None else media_type
)
body instance-attribute
body = render(content)
background instance-attribute
background = background
headers
render
render(content)
PARAMETER | DESCRIPTION |
---|
content | TYPE: Any |
Source code in starlette/responses.py
| def render(self, content: typing.Any) -> bytes:
if content is None:
return b“”
if isinstance(content, bytes):
return content
return content.encode(self.charset)
|
init_headers(headers=None)
PARAMETER | DESCRIPTION |
---|
headers | TYPE: Optional[Mapping[str, str]] DEFAULT: None |
Source code in starlette/responses.py
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
| def init_headers(
self, headers: typing.Optional[typing.Mapping[str, str]] = None
) -> None:
if headers is None:
raw_headers: typing.List[typing.Tuple[bytes, bytes]] = []
populate_content_length = True
populate_content_type = True
else:
raw_headers = [
(k.lower().encode(“latin-1”), v.encode(“latin-1”))
for k, v in headers.items()
]
keys = [h[0] for h in raw_headers]
populate_content_length = b“content-length” not in keys
populate_content_type = b“content-type” not in keys
body = getattr(self, “body”, None)
if (
body is not None
and populate_content_length
and not (self.status_code < 200 or self.status_code in (204, 304))
):
content_length = str(len(body))
raw_headers.append((b“content-length”, content_length.encode(“latin-1”)))
content_type = self.media_type
if content_type is not None and populate_content_type:
if content_type.startswith(“text/“):
content_type += “; charset=” + self.charset
raw_headers.append((b“content-type”, content_type.encode(“latin-1”)))
self.raw_headers = raw_headers
|
set_cookie
set_cookie(
key,
value="",
max_age=None,
expires=None,
path="/",
domain=None,
secure=False,
httponly=False,
samesite="lax",
)
PARAMETER | DESCRIPTION |
---|
key | TYPE: str |
value | TYPE: str DEFAULT: ‘’ |
max_age | TYPE: Optional[int] DEFAULT: None |
expires | TYPE: Optional[Union[datetime, str, int]] DEFAULT: None |
path | TYPE: str DEFAULT: ‘/‘ |
domain | TYPE: Optional[str] DEFAULT: None |
secure | TYPE: bool DEFAULT: False |
httponly | TYPE: bool DEFAULT: False |
samesite | TYPE: Optional[Literal[‘lax’, ‘strict’, ‘none’]] DEFAULT: ‘lax’ |
Source code in starlette/responses.py
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
| def set_cookie(
self,
key: str,
value: str = “”,
max_age: typing.Optional[int] = None,
expires: typing.Optional[typing.Union[datetime, str, int]] = None,
path: str = “/“,
domain: typing.Optional[str] = None,
secure: bool = False,
httponly: bool = False,
samesite: typing.Optional[Literal[“lax”, “strict”, “none”]] = “lax”,
) -> None:
cookie: “http.cookies.BaseCookie[str]” = http.cookies.SimpleCookie()
cookie[key] = value
if max_age is not None:
cookie[key][“max-age”] = max_age
if expires is not None:
if isinstance(expires, datetime):
cookie[key][“expires”] = format_datetime(expires, usegmt=True)
else:
cookie[key][“expires”] = expires
if path is not None:
cookie[key][“path”] = path
if domain is not None:
cookie[key][“domain”] = domain
if secure:
cookie[key][“secure”] = True
if httponly:
cookie[key][“httponly”] = True
if samesite is not None:
assert samesite.lower() in [
“strict”,
“lax”,
“none”,
], “samesite must be either ‘strict’, ‘lax’ or ‘none’”
cookie[key][“samesite”] = samesite
cookie_val = cookie.output(header=“”).strip()
self.raw_headers.append((b“set-cookie”, cookie_val.encode(“latin-1”)))
|
delete_cookie
delete_cookie(
key,
path="/",
domain=None,
secure=False,
httponly=False,
samesite="lax",
)
PARAMETER | DESCRIPTION |
---|
key | TYPE: str |
path | TYPE: str DEFAULT: ‘/‘ |
domain | TYPE: Optional[str] DEFAULT: None |
secure | TYPE: bool DEFAULT: False |
httponly | TYPE: bool DEFAULT: False |
samesite | TYPE: Optional[Literal[‘lax’, ‘strict’, ‘none’]] DEFAULT: ‘lax’ |
Source code in starlette/responses.py
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
| def delete_cookie(
self,
key: str,
path: str = “/“,
domain: typing.Optional[str] = None,
secure: bool = False,
httponly: bool = False,
samesite: typing.Optional[Literal[“lax”, “strict”, “none”]] = “lax”,
) -> None:
self.set_cookie(
key,
max_age=0,
expires=0,
path=path,
domain=domain,
secure=secure,
httponly=httponly,
samesite=samesite,
)
|