#34394: ASGIRequest doesn't respect settings.FORCE_SCRIPT_NAME.
----------------------------------+------------------------------------
Reporter: julyzergcn | Owner: nobody
Type: Bug | Status: new
Component: HTTP handling | Version: 4.1
Severity: Normal | Resolution:
Keywords: asgi SCRIPT_NAME | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
----------------------------------+------------------------------------
Changes (by Mariusz Felisiak):
* cc: Carlton Gibson, Andrew Godwin (added)
* component: Core (URLs) => HTTP handling
* stage: Unreviewed => Accepted
Comment:
Thanks for the report. It seems that `ASGIRequest` should take
`FORCE_SCRIPT_NAME` into account (as `WSGIRequest`), e.g.
{{{#!diff
diff --git a/django/core/handlers/asgi.py b/django/core/handlers/asgi.py
index 569157b277..c5eb87c712 100644
--- a/django/core/handlers/asgi.py
+++ b/django/core/handlers/asgi.py
@@ -40,7 +40,7 @@ class ASGIRequest(HttpRequest):
self._post_parse_error = False
self._read_started = False
self.resolver_match = None
- self.script_name = self.scope.get("root_path", "")
+ self.script_name = get_script_prefix(scope)
if self.script_name:
# TODO: Better is-prefix checking, slash handling?
self.path_info = scope["path"].removeprefix(self.script_name)
@@ -169,7 +169,7 @@ class ASGIHandler(base.BaseHandler):
except RequestAborted:
return
# Request is complete and can be served.
- set_script_prefix(self.get_script_prefix(scope))
+ set_script_prefix(get_script_prefix(scope))
await signals.request_started.asend(sender=self.__class__,
scope=scope)
# Get the request and check for basic issues.
request, error_response = self.create_request(scope, body_file)
@@ -310,10 +310,11 @@ class ASGIHandler(base.BaseHandler):
)
position += cls.chunk_size
- def get_script_prefix(self, scope):
- """
- Return the script prefix to use from either the scope or a
setting.
- """
- if settings.FORCE_SCRIPT_NAME:
- return settings.FORCE_SCRIPT_NAME
- return scope.get("root_path", "") or ""
+
+def get_script_prefix(scope):
+ """
+ Return the script prefix to use from either the scope or a setting.
+ """
+ if settings.FORCE_SCRIPT_NAME:
+ return settings.FORCE_SCRIPT_NAME
+ return scope.get("root_path", "") or ""
}}}
Would you like to prepare a patch via GitHub PR? (a regression test is
required.)
--
Ticket URL: <https://code.djangoproject.com/ticket/34394#comment:1>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/01070186c4d809b9-0968fd87-7329-49d2-9acd-70bd8df22705-000000%40eu-central-1.amazonses.com.