Created
January 15, 2026 23:34
-
-
Save jsbueno/2ecac2b151e1a0c026b615b331374f17 to your computer and use it in GitHub Desktop.
Snippet: uma view de fastapi que usa um middleware pra recuperar um valor do request em uma chamada usada pela view: a view nao precisa saber NADA sobre "quem_chamou".
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # pip install fastapi, python-extracontext | |
| from fastapi import FastAPI, Request | |
| from extracontext import ContextLocal | |
| app = FastAPI() | |
| ctx = ContextLocal() | |
| @app.middleware("http") | |
| async def anota_quem_chamou(request: Request, call_next): | |
| ctx.quem_chamou = request.query_params.get("usuario") | |
| # <= voce normalmente vai extrair isso do request | |
| # (headers, cookies, url, etc...) | |
| response = await call_next(request) | |
| return response | |
| def ve_se_pode(permissao): | |
| # aqui o namespace ctx funciona separado pra cada request! | |
| if permissao == "pode_ver" and ctx.quem_chamou == "joao": | |
| return True | |
| ... | |
| return False | |
| @app.get("/coisa") | |
| def coisa(contexto: str): # contexto, extraido por inj. de dependencia normal do FastApi | |
| if ve_se_pode("pode_ver"): | |
| return contexto + " coisa" | |
| return contexto + " tem nada" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment