Using the Request Directly
The current page still doesn’t have a translation for this language.
But you can help translating it: Contributing.
Up to now, you have been declaring the parts of the request that you need with their types.
Taking data from:
- Headers.
- etc.
And by doing so, FastAPI is validating that data, converting it and generating documentation for your API automatically.
But there are situations where you might need to access the Request
object directly.
It would also mean that if you get data from the Request
object directly (for example, read the body) it won’t be validated, converted or documented (with OpenAPI, for the automatic API user interface) by FastAPI.
Although any other parameter declared normally (for example, the body with a Pydantic model) would still be validated, converted, annotated, etc.
But there are specific cases where it’s useful to get the Request
object.
Let’s imagine you want to get the client’s IP address/host inside of your path operation function.
For that you need to access the request directly.
By declaring a path operation function parameter with the type being the FastAPI will know to pass the Request
in that parameter.
Note that in this case, we are declaring a path parameter beside the request parameter.
So, the path parameter will be extracted, validated, converted to the specified type and annotated with OpenAPI.
The same way, you can declare any other parameter as normally, and additionally, get the Request
too.
You can read more details about the Request object in the official Starlette documentation site.
Technical Details
You could also use .