J'ai une fonction qui ressemble à ceci:

@app.middleware("http")
async def process_api_event(request: Request, call_next):
     url = request.url
     path = request.url.path 
     # request.__setattr__('url', 'sample_url')
     # request.url.__ setattr__('path', 'sample_path')

Dans la fonction ci-dessus, en fonction de la situation, je souhaite modifier l'URL ou le chemin de la demande. J'ai essayé request.__setattr__('url', 'sample_url') et request.url.__ setattr__('path', 'sample_path') comme indiqué ci-dessus mais je n'ai pas pu le faire à cause de AttributeError: can't set attribute error. J'ai lu la documentation FastAPI et Starlette, mais je n'ai pas vraiment trouvé les informations dont j'avais besoin dans ce cas. Toute aide serait grandement appréciée!

0
louprogramming 30 oct. 2020 à 03:08

1 réponse

Meilleure réponse

request.url est une propriété qui obtient _url attribut, vous pouvez donc définir _url (mais request.scope et request.base_url ne changeront pas)

from starlette.datastructures import URL

@app.middleware("http")
async def process_api_event(request: Request, call_next):
    request._url = URL('sample_url')
    print(request.url)
    ...
0
r-m-n 30 oct. 2020 à 08:35