Comments (4)
Here the thing is that even if you return a dict
with the data as you want it, FastAPI will try to pass it to the Model
in response_model
and re-serialize it with that model.
But if instead of returning a Pydantic model or a dict
you return a Starlette Response, it will use it as is.
Here's one way you could solve it (your same code and data requirements, but the tests pass):
from fastapi.encoders import jsonable_encoder
import json
from typing import List
from fastapi import FastAPI
from pydantic import BaseModel, Schema
import pytest
from starlette.testclient import TestClient
from starlette.responses import JSONResponse
app = FastAPI()
class Model(BaseModel):
model_field: str = Schema(..., alias="modelField")
class Config:
allow_population_by_alias = True
@app.get("/models", response_model=List[Model])
def get_models():
m = Model(model_field="string")
content = jsonable_encoder([
Model(model_field=m.model_field),
Model(modelField=m.model_field),
Model(**m.dict()),
Model(**m.dict(by_alias=True)),
], by_alias=True)
return JSONResponse(content=content)
@app.post("/models", response_model=Model)
def create_model(m: Model):
content = jsonable_encoder(Model(**m.dict()), by_alias=True)
return JSONResponse(content=content)
@pytest.fixture
def client():
yield TestClient(app)
def test_get_models(client):
with client:
response = client.get("/models")
assert response.json() == [{"modelField": "string"} for _ in range(4)]
def test_create_model(client):
with client:
response = client.post("/models", json.dumps({"modelField": "string"}))
assert response.json() == {"modelField": "string"}
from fastapi.
Thanks! I changed my code and now it works as I want
from fastapi.
Great! Thanks for reporting back and closing the issue.
from fastapi.
Assuming the original need was handled, this will be automatically closed now. But feel free to add more comments or create new issues or PRs.
from fastapi.
Related Issues (20)
- No streaming interface can not support concurrency for two fastapi servers
- Using pydantic Json Type as Form data type doesn't work HOT 1
- Raw docstring (leading `r`) defeats form feed `\f` truncation HOT 3
- OpenAPI Example with multipart/form-data not showing up HOT 5
- [BUG] Using Nested Pydantic models and `params: MyModel = Depends()` forces OpenAPI docs GET methods to require a request body. HOT 6
- How to fix this bug? HOT 2
- [BUG] Upgrade python-mulipart==0.0.7 from low version fastapi upload file may be 400 HOT 4
- Use `RootModel` as query parameter HOT 2
- Context managers in `Depends` are broken after 0.106 HOT 16
- Middleware runs twice HOT 8
- Support for Pydantic deprecated fields HOT 1
- axios can't receive error response status code
- Potential footgun when using custom `Response(background=<Task()>)` in conjunction with injected `BackgroundTasks` - the custom response overwrites the tasks HOT 3
- lifespan
- Breaking change with path parameters when updating to pydantic>=2 from pydantic<2 HOT 1
- trying to live video stream using Fastapi
- Package on test.pypi.org is broken
- middleware type
- It throws an exception when I specify return Http status code
- When backend restart the frontend request a protected api cause an unhandle exception: Exception in ASGI application HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from fastapi.