Request¶
The Request object represents an incoming HTTP request.
Properties¶
request.method¶
HTTP method (GET, POST, etc.).
@app.route("/resource", methods=["GET", "POST"])
def handler(request):
if request.method == "GET":
return {"action": "get"}
elif request.method == "POST":
return {"action": "create"}
Type: str
request.path¶
Request path without query string.
@app.get("/users/{id}")
def handler(request):
path = request.path # "/users/123"
return {"path": path}
Type: str
request.params¶
Path parameters extracted from the URL.
@app.get("/users/{user_id}/posts/{post_id}")
def handler(request):
user_id = request.params["user_id"]
post_id = request.params["post_id"]
return {"user_id": user_id, "post_id": post_id}
Type: dict[str, str]
request.query¶
Query string parameters.
# GET /search?q=python&limit=10
@app.get("/search")
def handler(request):
query = request.query.get("q", "")
limit = request.query.get("limit", "10")
return {"query": query, "limit": int(limit)}
Type: QueryParams
QueryParams Methods¶
| Method | Description |
|---|---|
get(key, default=None) | Get single value |
get_all(key) | Get all values for key |
keys() | Get all parameter keys |
items() | Get all key-value pairs |
request.headers¶
HTTP headers dictionary.
@app.get("/")
def handler(request):
content_type = request.headers.get("Content-Type")
return {"content_type": content_type}
Type: dict[str, str]
request.context¶
Request context for storing data across middleware.
@app.get("/protected")
def handler(request):
# Set by auth middleware
user = request.context.get("user")
claims = request.context.get("jwt_claims")
return {"user": user}
Type: Context
request.session¶
Session data (if sessions enabled).
@app.get("/profile")
def handler(request):
user_id = request.session.get("user_id")
return {"user_id": user_id}
Type: Session
request.client_ip¶
Client IP address.
Type: str
request.url¶
Full request URL.
@app.get("/")
def handler(request):
url = request.url # "http://localhost:8000/path?query=value"
return {"url": url}
Type: str
request.scheme¶
URL scheme (http or https).
@app.get("/")
def handler(request):
scheme = request.scheme # "http" or "https"
return {"scheme": scheme}
Type: str
request.host¶
Host header value.
Type: str
request.content_type¶
Content-Type header value.
@app.post("/")
def handler(request):
content_type = request.content_type
return {"content_type": content_type}
Type: str | None
request.content_length¶
Content-Length header value.
@app.post("/")
def handler(request):
length = request.content_length
return {"content_length": length}
Type: int | None
Methods¶
request.get_header(name, default=None)¶
Get a specific header value.
@app.get("/")
def handler(request):
auth = request.get_header("Authorization")
custom = request.get_header("X-Custom", "default")
return {"auth": auth, "custom": custom}
Parameters:
| Parameter | Type | Description |
|---|---|---|
name | str | Header name (case-insensitive) |
default | str | None | Default value if not found |
Returns: str | None
request.json()¶
Parse request body as JSON.
@app.post("/users")
def handler(request):
data = request.json()
name = data.get("name")
email = data.get("email")
return {"name": name, "email": email}
Returns: dict | list
Raises: ValueError if body is not valid JSON
Lazy Parsing
JSON is parsed lazily on first access and cached for subsequent calls.
request.text()¶
Get request body as text.
Returns: str
request.body()¶
Get raw request body as bytes.
Returns: bytes
request.form()¶
Parse request body as form data.
@app.post("/form")
def handler(request):
form = request.form()
name = form.get("name")
email = form.get("email")
return {"name": name, "email": email}
Returns: dict[str, str]
request.files()¶
Get uploaded files from multipart form data.
@app.post("/upload")
async def handler(request):
files = await request.files()
for file in files:
filename = file.filename
content = await file.read()
# Process file
return {"uploaded": len(files)}
Returns: list[UploadFile]
UploadFile Properties¶
| Property | Type | Description |
|---|---|---|
filename | str | Original filename |
content_type | str | MIME type |
size | int | File size in bytes |
UploadFile Methods¶
| Method | Description |
|---|---|
read() | Read entire file as bytes |
read_text() | Read file as text |
save(path) | Save file to disk |
request.is_json()¶
Check if request has JSON content type.
@app.post("/")
def handler(request):
if request.is_json():
data = request.json()
else:
data = request.form()
return data
Returns: bool
request.is_form()¶
Check if request has form content type.
@app.post("/")
def handler(request):
if request.is_form():
data = request.form()
else:
data = request.json()
return data
Returns: bool
Async Methods¶
For async handlers, some methods return awaitables:
@app.post("/async")
async def handler(request):
# Async body methods
body = await request.body_async()
text = await request.text_async()
json_data = await request.json_async()
files = await request.files()
return {"received": True}
Request Context¶
The request.context object allows middleware to pass data to handlers:
# In middleware
request.context.set("user_id", "123")
request.context.set("permissions", ["read", "write"])
# In handler
@app.get("/")
def handler(request):
user_id = request.context.get("user_id")
permissions = request.context.get("permissions", [])
return {"user_id": user_id, "permissions": permissions}
Context Methods¶
| Method | Description |
|---|---|
get(key, default=None) | Get value |
set(key, value) | Set value |
has(key) | Check if key exists |
delete(key) | Remove key |
clear() | Clear all values |