#32259 closed New feature (wontfix)
Modernize request attribute names
| Reported by: | Adam Johnson | Owned by: | Adam Johnson |
|---|---|---|---|
| Component: | HTTP handling | Version: | dev |
| Severity: | Normal | Keywords: | |
| Cc: | אורי, Carlton Gibson | Triage Stage: | Unreviewed |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
As discussed on the mailing list (back in May):
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.
Change History (10)
comment:1 by , 5 years ago
| Owner: | changed from to |
|---|
comment:2 by , 5 years ago
comment:3 by , 5 years ago
| Cc: | added |
|---|
comment:4 by , 5 years ago
| Triage Stage: | Unreviewed → Accepted |
|---|
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. :)
comment:5 by , 5 years ago
| Type: | Cleanup/optimization → New feature |
|---|
I'm going to call this a New Feature. It will need release notes.
comment:6 by , 5 years ago
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!
comment:7 by , 5 years ago
| Has patch: | set |
|---|
comment:8 by , 5 years ago
| Summary: | Rename request attributes → Modernize request attribute names |
|---|
comment:9 by , 5 years ago
| Cc: | added |
|---|---|
| Resolution: | → wontfix |
| Status: | assigned → closed |
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.
comment:10 by , 5 years ago
| Triage Stage: | Accepted → Unreviewed |
|---|
What will happen to existing code who will use
request.GETorrequest.META?I found out that we are also using
request.LANGUAGE_CODE.