Opened 10 years ago
Last modified 13 days ago
#21442 assigned New feature
Configurable request parsing.
Reported by: | Tom Christie | Owned by: | Abhinav Yadav |
---|---|---|---|
Component: | HTTP handling | Version: | dev |
Severity: | Normal | Keywords: | |
Cc: | antonis+djangoproject.com@…, Mark Lavin | Triage Stage: | Accepted |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | yes |
Easy pickings: | no | UI/UX: | no |
Description
This ticket if for implementing a request parsing API that ensures the Request
objects can nicely handle JSON and other submitted types in addition the the existing multipart parsing.
The proposed API is based on this discussion: https://groups.google.com/forum/#!searchin/django-developers/request.DATA/django-developers/s8OZ9yNh-8c/oCbNL5x6avAJ
request.DATA
orrequest.data
for accessing the parsed data.request.parsers
or similar for modifying the parsers prior to parsing on a per-view basis.request.accepted_parser
or similar for branching on media type if needed.- A setting
REQUEST_PARSERS
or similar, that controls the default set of installed parsers.
Change History (12)
comment:1 Changed 10 years ago by
Triage Stage: | Unreviewed → Accepted |
---|
comment:2 Changed 9 years ago by
Cc: | antonis+djangoproject.com@… added |
---|
comment:3 Changed 9 years ago by
Owner: | changed from nobody to Tom Christie |
---|---|
Status: | new → assigned |
comment:4 Changed 8 years ago by
comment:5 Changed 8 years ago by
or this is the HTTP Handling part only? view parts will be implemented differently in another ticket? serialization in another part? hope you don't get me wrong for asking too many questions.
comment:6 Changed 6 years ago by
Cc: | Mark Lavin added |
---|
comment:8 Changed 19 months ago by
Owner: | Tom Christie deleted |
---|---|
Status: | assigned → new |
comment:9 Changed 10 months ago by
These 3 issues are related.
[1] https://code.djangoproject.com/ticket/21442
[2] https://code.djangoproject.com/ticket/28678
[3] https://github.com/encode/django-rest-framework/issues/4881
[1] is the overall tracker for this issue, desires to create a configurable parser. Opened 9 years ago.
[3] describes the desired behavior with example. Opened 5 years ago.
[2] has a proposed fix (credit: Facundo Batista). The fix is simple and worked well when I tried it. Opened 5 years ago.
Surely a configurable parser [1] is a good goal to pursue. But if it
takes 9 years before anything happens, perhaps we can take [2]? It is
not configurable, but it works well.
re: a case for multipart parser that can handle json parts
I have an api that takes some json input, plus 2 optional image files.
With json parser, I cannot easily include image files (base64 works, but
clumsy for modest size images).
Multipart parser allows me to send the json input plus images in 1
call. But all the data parts are treated as text (str). One of the
data field is a dict (eg. { "x": 7, "y": 5 }).
If I use json parser, it is an dict (good).
If I use multipart parser, it becomes a str (bad; desired to get a
dict).
comment:10 Changed 6 months ago by
Owner: | set to Carlton Gibson |
---|---|
Patch needs improvement: | set |
Status: | new → assigned |
Following thread on mailing list, we're going to approach by adding the request.data
part, adding just JSON handling, before making the accepted content types pluggable as a second step.
Beginning work over here. Not yet ready.
Related to #32259 to modernise the request object at the same time.
comment:11 Changed 3 weeks ago by
Owner: | Carlton Gibson deleted |
---|---|
Status: | assigned → new |
De-assigning myself as this has been picked up for GSoC this year.
comment:12 Changed 13 days ago by
Owner: | set to Abhinav Yadav |
---|---|
Status: | new → assigned |
https://github.com/django/deps/blob/master/draft/content-negotiation.rst
reading the DEP
my thoughts are wouldn't it better/nicer to handle the content negotiation per view based content negotiation? and there should be decorators to handle content negotiation in view level?
+ is it really necessary to introduce new global settings?