简体   繁体   中英

How can I set attribute to request object in FastAPI from middleware?

How can I set an arbitrary attribute to the Request object from the middleware function?

from fastapi import FastAPI, Request

app = FastAPI()


@app.middleware("http")
async def set_custom_attr(request: Request, call_next):
    request.custom_attr = "This is my custom attribute"
    response = await call_next(request)
    return response


@app.get("/")
async def root(request: Request):
    return {"custom_attr": request.custom_attr}

This setup is raising an exception,

AttributeError: 'Request' object has no attribute 'custom_attr'

So, how can I get the "This is my custom attribute" value in my router?

We can't attach/set an attribute to the request object (correct me if I am wrong).

But, we can make use of the Request.state --(Doc) property

from fastapi import FastAPI, Request

app = FastAPI()


@app.middleware("http")
async def set_custom_attr(request: Request, call_next):

    

    response = await call_next(request)
    return response


@app.get("/")
async def root(request: Request):
    return {"custom_attr": } # accessing the value from `request.state`

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM