Comments (8)
Hi @sarvesh4396
My initial thoughts was using middleware to modify the body. I looked around a bit and found this issue:
encode/starlette#495 (comment)
It's definitely not easy to do, but I think it's possible.
We have a couple of ways of modifying the behaviour of PiccoloCRUD
. One is hooks, but probably not useful in this situation.
The other is validators. The intended purpose is to add extra validation to endpoints, but you may be able to use these to modify the request.
async def my_validator(piccolo_crud: PiccoloCRUD, request: Request):
json = await request.json()
request._json = {**json, 'custom_field': 'hello world'}
It might be worth giving that a go.
from piccolo_api.
hey @dantownsend ,
I tried the above solution but it doesn't work cause the data is extracted before the validators run.
from piccolo_api.
@sarvesh4396 OK, interesting. When you do await request.json()
does it just hang?
from piccolo_api.
@dantownsend Yes, It does, query params can be changed through middleware but not the body.
For now, I have passed the modify_body
arg for a quick patch it is working fine.
from piccolo_api.
@sarvesh4396 OK, cool. Do you think this is something we could write a custom hook for?
from piccolo_api.
@dantownsend I didn't get it, Do you mean by Hooks which are there in piccolo-api? or something else.
Though I believe we could write a function for it. and we can run it wherever we are doing await request.json()
such that we do not have to await again and again which may hamper performance.
accessing the request body in middleware has been an issue I couldn't find anything yet which can resolve it.
from piccolo_api.
@sarvesh4396 Yeah, we have hooks for PiccoloAPI like pre_save
. Could add a new one maybe? 🤔
In our CSRFMiddleware
we access the request body, but then add it to the ASGI scope. This works OK, but the downstream app needs to know to look in the scope for the data.
piccolo_api/piccolo_api/csrf/middleware.py
Lines 136 to 139 in 16704dd
from piccolo_api.
@dantownsend, It should work ideally, as we can receive the request Object in hooks.
from piccolo_api.
Related Issues (20)
- TypeError: __init__() got an unexpected keyword argument 'excluded_paths' HOT 5
- Fix code scanning alert - Unused global variable
- Batch version of the get endpoint HOT 6
- Drop Python 3.7 support
- Catch foreign key constraint errors in `PiccoloCRUD`
- `schema_extra` param not passed to `pydantic_model_{output | optional | plural}` methods HOT 1
- Piccolo Admin API docs are not rendering
- Better error display on PATCH request
- Alpha version for Pydantic 2.0 / Piccolo 1.0a1? HOT 2
- PiccoloCRUD `post_single` return id of the inserted row instead of the row HOT 3
- Add `ne` operator
- Python 3.12 support
- RateLimitingMiddleware tests failed HOT 5
- Stop multi-dimensional arrays from breaking
- Issue with updating and bulk updating `BaseUser` via admin panel HOT 15
- Updating middleware syntax HOT 6
- Make `default-src` configurable in `CSPMiddleware`
- Hide parameter in Validators to hide Piccolo Admin table link from sidebar if the validators fail. HOT 8
- Add `excluded_paths` to `SessionsAuthBackend`
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 piccolo_api.