NEW: Fenrir v1.2.2 is now available — Logo & Favicon Patch! Read the changelog
middleware.md
docs middleware.md

Middleware

Request Middleware

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
from fenrir import request

@app.before_request
async def log_request():
    print(f"{request.method} {request.path}")

@app.after_request
async def add_security_headers(response):
    response.headers["X-Content-Type-Options"] = "nosniff"
    response.headers["X-Frame-Options"] = "DENY"
    return response

Middleware for Authentication

1
2
3
4
5
6
7
8
from fenrir import HTTPUnauthorized

@app.before_request
async def check_auth():
    if request.path.startswith("/admin"):
        token = request.headers.get("Authorization")
        if not token or token != "Bearer valid-token":
            raise HTTPUnauthorized()

Request/Response Modification

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from fenrir import g

@app.before_request
async def add_user_context():
    # Extract user from request
    auth_header = request.headers.get("Authorization")
    if auth_header:
        g.user_id = extract_user_id(auth_header)

@app.after_request
async def add_tracking_header(response):
    response.headers["X-Request-ID"] = str(g.get("request_id"))
    return response

Teardown Request

1
2
3
4
@app.teardown_request
async def cleanup():
    # Cleanup resources
    print("Cleaning up resources")
Edit on GitHub Last Updated: Jun 04, 2026
© 2026 Fenrir Project.
main*
v1.2.2
Ln 1, Col 1
UTF-8
Prettier
Light Mode
Markdown