@ -7,6 +7,126 @@ hide:
## Latest Changes
## Latest Changes
### Highlights
Now you can declare `Query` , `Header` , and `Cookie` parameters with Pydantic models. 🎉
#### `Query` Parameter Models
Use Pydantic models for `Query` parameters:
```python
from typing import Annotated, Literal
from fastapi import FastAPI, Query
from pydantic import BaseModel, Field
app = FastAPI()
class FilterParams(BaseModel):
limit: int = Field(100, gt=0, le=100)
offset: int = Field(0, ge=0)
order_by: Literal["created_at", "updated_at"] = "created_at"
tags: list[str] = []
@app .get("/items/")
async def read_items(filter_query: Annotated[FilterParams, Query()]):
return filter_query
```
Read the new docs: [Query Parameter Models ](https://fastapi.tiangolo.com/tutorial/query-param-models/ ).
#### `Header` Parameter Models
Use Pydantic models for `Header` parameters:
```python
from typing import Annotated
from fastapi import FastAPI, Header
from pydantic import BaseModel
app = FastAPI()
class CommonHeaders(BaseModel):
host: str
save_data: bool
if_modified_since: str | None = None
traceparent: str | None = None
x_tag: list[str] = []
@app .get("/items/")
async def read_items(headers: Annotated[CommonHeaders, Header()]):
return headers
```
Read the new docs: [Header Parameter Models ](https://fastapi.tiangolo.com/tutorial/header-param-models/ ).
#### `Cookie` Parameter Models
Use Pydantic models for `Cookie` parameters:
```python
from typing import Annotated
from fastapi import Cookie, FastAPI
from pydantic import BaseModel
app = FastAPI()
class Cookies(BaseModel):
session_id: str
fatebook_tracker: str | None = None
googall_tracker: str | None = None
@app .get("/items/")
async def read_items(cookies: Annotated[Cookies, Cookie()]):
return cookies
```
Read the new docs: [Cookie Parameter Models ](https://fastapi.tiangolo.com/tutorial/cookie-param-models/ ).
#### Forbid Extra Query (Cookie, Header) Parameters
Use Pydantic models to restrict extra values for `Query` parameters (also applies to `Header` and `Cookie` parameters).
To achieve it, use Pydantic's `model_config = {"extra": "forbid"}` :
```python
from typing import Annotated, Literal
from fastapi import FastAPI, Query
from pydantic import BaseModel, Field
app = FastAPI()
class FilterParams(BaseModel):
model_config = {"extra": "forbid"}
limit: int = Field(100, gt=0, le=100)
offset: int = Field(0, ge=0)
order_by: Literal["created_at", "updated_at"] = "created_at"
tags: list[str] = []
@app .get("/items/")
async def read_items(filter_query: Annotated[FilterParams, Query()]):
return filter_query
```
This applies to `Query` , `Header` , and `Cookie` parameters, read the new docs:
* [Forbid Extra Query Parameters ](https://fastapi.tiangolo.com/tutorial/query-param-models/#forbid-extra-query-parameters )
* [Forbid Extra Headers ](https://fastapi.tiangolo.com/tutorial/header-param-models/#forbid-extra-headers )
* [Forbid Extra Cookies ](https://fastapi.tiangolo.com/tutorial/cookie-param-models/#forbid-extra-cookies )
### Features
### Features
* ✨ Add support for Pydantic models for parameters using `Query` , `Cookie` , `Header` . PR [#12199 ](https://github.com/fastapi/fastapi/pull/12199 ) by [@tiangolo ](https://github.com/tiangolo ).
* ✨ Add support for Pydantic models for parameters using `Query` , `Cookie` , `Header` . PR [#12199 ](https://github.com/fastapi/fastapi/pull/12199 ) by [@tiangolo ](https://github.com/tiangolo ).