问题描述
@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')
在上述功能中,根据情况,我想更改请求url或路径。
如上所述,我尝试了request.__setattr__('url','sample_url')
和request.url.__ setattr__('path','sample_path')
,但是由于AttributeError: can't set attribute error
而无法执行。我通读了FastAPI和Starlette文档,但在这种情况下并没有真正找到所需的信息。任何帮助将不胜感激!
解决方法
request.url
是具有_url
属性的属性,因此您可以设置_url
(但是request.scope
和request.base_url
不会改变)
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)
...