Skip to content

Commit 3b9ca71

Browse files
committed
Update RedirectView init params, remove 410 gone usage
1 parent 2c5b0e9 commit 3b9ca71

File tree

1 file changed

+19
-24
lines changed

1 file changed

+19
-24
lines changed

plain/plain/views/redirect.py

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,32 @@
1-
import logging
2-
31
from plain.http import (
4-
ResponseGone,
52
ResponsePermanentRedirect,
63
ResponseRedirect,
74
)
85
from plain.urls import reverse
96

107
from .base import View
118

12-
logger = logging.getLogger("plain.request")
13-
149

1510
class RedirectView(View):
1611
"""Provide a redirect on any GET request."""
1712

1813
permanent = False
1914
url: str | None = None
20-
pattern_name: str | None = None
21-
query_string = False
15+
url_name: str | None = None
16+
preserve_query_params = False
2217

23-
def __init__(self, url=None, permanent=None):
24-
# Allow url and permanent to be set in RedirectView.as_view(url="...", permanent=True)
18+
def __init__(
19+
self, url=None, permanent=None, url_name=None, preserve_query_params=None
20+
):
21+
# Allow attributes to be set in RedirectView.as_view(url="...", permanent=True, etc.)
2522
self.url = url or self.url
2623
self.permanent = permanent if permanent is not None else self.permanent
24+
self.url_name = url_name or self.url_name
25+
self.preserve_query_params = (
26+
preserve_query_params
27+
if preserve_query_params is not None
28+
else self.preserve_query_params
29+
)
2730

2831
def get_redirect_url(self):
2932
"""
@@ -33,30 +36,22 @@ def get_redirect_url(self):
3336
"""
3437
if self.url:
3538
url = self.url % self.url_kwargs
36-
elif self.pattern_name:
37-
url = reverse(self.pattern_name, *self.url_args, **self.url_kwargs)
39+
elif self.url_name:
40+
url = reverse(self.url_name, *self.url_args, **self.url_kwargs)
3841
else:
39-
return None
42+
raise ValueError("RedirectView requires either url or url_name to be set")
4043

4144
args = self.request.meta.get("QUERY_STRING", "")
42-
if args and self.query_string:
45+
if args and self.preserve_query_params:
4346
url = f"{url}?{args}"
4447
return url
4548

4649
def get(self):
4750
url = self.get_redirect_url()
48-
if url:
49-
if self.permanent:
50-
return ResponsePermanentRedirect(url)
51-
else:
52-
return ResponseRedirect(url)
51+
if self.permanent:
52+
return ResponsePermanentRedirect(url)
5353
else:
54-
logger.warning(
55-
"Gone: %s",
56-
self.request.path,
57-
extra={"status_code": 410, "request": self.request},
58-
)
59-
return ResponseGone()
54+
return ResponseRedirect(url)
6055

6156
def head(self):
6257
return self.get()

0 commit comments

Comments
 (0)