Request API Reference
Basic Properties
python
# Access request data
request.method # "GET", "POST", etc
request.url # Full URL object
request.path # "/users/42"
request.headers # Case-insensitive dict
request.query_params # URL query parameters
request.cookies # Dict of cookies
request.client # (host, port) tuple
Body Content
python
# Read body content
body = await request.body # Raw bytes
text = await request.text # Decoded text
data = await request.json # Parsed JSON
# Example: JSON API handler
@app.post("/users")
async def create_user(request, response):
user_data = await request.json
return {"id": 42, **user_data}
Form Data
python
# Handle forms
form = await request.form # FormData object
name = form["username"] # Form field
# File uploads
files = await request.files # Dict of uploaded files
file = files["avatar"] # File object
filename = file.filename # Original filename
content = await file.read() # File content
Advanced Features
python
# Path parameters (from route /users/{id})
user_id = request.path_params["id"]
# State storage (middleware to handler)
request.state.user = current_user
# Session handling (requires middleware)
session = request.session
session["user_id"] = 42
# User authentication (requires middleware)
user = request.user # None or authenticated user
Utility Methods
python
# Build absolute URLs
url = request.build_absolute_uri("/profile")
# Check connection status
if await request.is_disconnected():
raise TimeoutError()
# HTTP/2 Server Push
await request.send_push_promise("/style.css")
Key Notes
- Async Access: Body/form methods are
await
able - Type Safety: Path/query params convert types (e.g.,
{id:int}
→int
) - File Handling: Stream large files without memory overload
- Extensions:
state
anduser
require middleware setup
Common Patterns
JSON API
python
@app.post("/data")
async def handle_data(request, response):
data = await request.json
return {"received": data}
Form Submission
python
@app.post("/register")
async def register(request, response):
form = await request.form
username = form["username"]
avatar = (await request.files)["avatar"]
# Process registration...
Protected Route
python
@app.get("/profile")
async def profile(request, response):
if not request.user:
raise HTTPException(401)
return {"user": request.user}