> request.GET and request.POST are misleadingly named:
>
> * GET contains the URL parameters and is therefore available whatever
the request method. This often confuses beginners and “returners” alike.
> * POST contains form data on POST requests, but not other kinds of data
from POST requests. It can confuse users who are posting JSON or other
formats.
>
> Additionally both names can lead users to think e.g. "if request.GET:"
means "if this is a GET request", which is not true.
>
> I believe the CAPITALIZED naming style was inherited from PHP's global
variables $_GET, $_POST, $_FILES etc. (
https://www.php.net/manual/en/reserved.variables.get.php ). It stands out
as unpythonic, since these are instance variables and not module-level
constants (as per PEP8 https://www.python.org/dev/peps/pep-0008/#constants
).
>
> I therefore propose these renames:
>
> * request.GET -> request.query_params (to match Django Rest Framework -
see below)
> * request.POST -> request.form_data
> * request.FILES -> request.files
> * request.COOKIES -> request.cookies
> * request.META -> request.meta
The biggest concern on the mailing list was churn. Therefore we won't
deprecate the old names, but will document them as historical aliases.
--
Ticket URL: <https://code.djangoproject.com/ticket/32259>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* owner: nobody => Adam (Chainz) Johnson
--
Ticket URL: <https://code.djangoproject.com/ticket/32259#comment:1>
Comment (by אורי):
What will happen to existing code who will use `request.GET` or
`request.META`?
I found out that we are also using `request.LANGUAGE_CODE`.
--
Ticket URL: <https://code.djangoproject.com/ticket/32259#comment:2>
* cc: אורי (added)
--
Ticket URL: <https://code.djangoproject.com/ticket/32259#comment:3>
* stage: Unreviewed => Accepted
Comment:
I think the consensus was to have this.
Leaving the old API in place, documented just once in the `request` docs,
is sufficient to avoid a forced rewrite. So +1.
> (back in May)
Funnily enough this crossed my mind just yesterday too. :)
--
Ticket URL: <https://code.djangoproject.com/ticket/32259#comment:4>
* type: Cleanup/optimization => New feature
Comment:
I'm going to call this a New Feature. It **will** need release notes.
--
Ticket URL: <https://code.djangoproject.com/ticket/32259#comment:5>
Comment (by Adam (Chainz) Johnson):
> I found out that we are also using request.LANGUAGE_CODE.
Thanks. I'm not sure if this one is such high value to change, it's
capitalized to indicate that it overrides the setting.
> I'm going to call this a New Feature. It will need release notes.
Fair enough!
--
Ticket URL: <https://code.djangoproject.com/ticket/32259#comment:6>
* has_patch: 0 => 1
--
Ticket URL: <https://code.djangoproject.com/ticket/32259#comment:7>
--
Ticket URL: <https://code.djangoproject.com/ticket/32259#comment:8>
* cc: Carlton Gibson (added)
* status: assigned => closed
* resolution: => wontfix
Comment:
Adam, thanks for creating a ticket. However, this change is really
disruptive and it will affect everyone. In the case of such changes, it's
crucial to have a strong consensus and clear significant benefits. I don't
see a strong consensus on the mailing list and benefits are not
convincing.
--
Ticket URL: <https://code.djangoproject.com/ticket/32259#comment:9>
* stage: Accepted => Unreviewed
--
Ticket URL: <https://code.djangoproject.com/ticket/32259#comment:10>