class RedirectView
from django.views.generic import RedirectView
Provide a redirect on any GET request.
Ancestors (MRO)
- RedirectView
- View
Methods
def
__init__(self, **kwargs):
View
¶
def
__init__(self, **kwargs):
View
¶
Constructor. Called in the URLconf; can contain helpful extra keyword arguments, and other things.
52 53 54 55 56 57 58 59 60 | def __init__(self, **kwargs):
"""
Constructor. Called in the URLconf; can contain helpful extra
keyword arguments, and other things.
"""
# Go through keyword arguments, and either save their values to our
# instance, or raise an error.
for key, value in kwargs.items():
setattr(self, key, value)
|
def
_allowed_methods(self):
View
¶
def
_allowed_methods(self):
View
¶
168 169 | def _allowed_methods(self):
return [m.upper() for m in self.http_method_names if hasattr(self, m)]
|
def
as_view(cls, **initkwargs):
View
¶
def
as_view(cls, **initkwargs):
View
¶
Main entry point for a request-response process.
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | @classonlymethod
def as_view(cls, **initkwargs):
"""Main entry point for a request-response process."""
for key in initkwargs:
if key in cls.http_method_names:
raise TypeError(
"The method name %s is not accepted as a keyword argument "
"to %s()." % (key, cls.__name__)
)
if not hasattr(cls, key):
raise TypeError(
"%s() received an invalid keyword %r. as_view "
"only accepts arguments that are already "
"attributes of the class." % (cls.__name__, key)
)
def view(request, *args, **kwargs):
self = cls(**initkwargs)
self.setup(request, *args, **kwargs)
if not hasattr(self, "request"):
raise AttributeError(
"%s instance has no 'request' attribute. Did you override "
"setup() and forget to call super()?" % cls.__name__
)
return self.dispatch(request, *args, **kwargs)
view.view_class = cls
view.view_initkwargs = initkwargs
# __name__ and __qualname__ are intentionally left unchanged as
# view_class should be used to robustly determine the name of the view
# instead.
view.__doc__ = cls.__doc__
view.__module__ = cls.__module__
view.__annotations__ = cls.dispatch.__annotations__
# Copy possible attributes set by decorators, e.g. @csrf_exempt, from
# the dispatch method.
view.__dict__.update(cls.dispatch.__dict__)
# Mark the callback if the view class is async.
if cls.view_is_async:
view._is_coroutine = asyncio.coroutines._is_coroutine
return view
|
def
delete(self, request, *args, **kwargs):
RedirectView
¶
def
delete(self, request, *args, **kwargs):
RedirectView
¶
268 269 | def delete(self, request, *args, **kwargs):
return self.get(request, *args, **kwargs)
|
def
dispatch(self, request, *args, **kwargs):
View
¶
def
dispatch(self, request, *args, **kwargs):
View
¶
132 133 134 135 136 137 138 139 140 141 142 | def dispatch(self, request, *args, **kwargs):
# Try to dispatch to the right method; if a method doesn't exist,
# defer to the error handler. Also defer to the error handler if the
# request method isn't on the approved list.
if request.method.lower() in self.http_method_names:
handler = getattr(
self, request.method.lower(), self.http_method_not_allowed
)
else:
handler = self.http_method_not_allowed
return handler(request, *args, **kwargs)
|
def
get(self, request, *args, **kwargs):
RedirectView
¶
def
get(self, request, *args, **kwargs):
RedirectView
¶
246 247 248 249 250 251 252 253 254 255 256 257 | def get(self, request, *args, **kwargs):
url = self.get_redirect_url(*args, **kwargs)
if url:
if self.permanent:
return HttpResponsePermanentRedirect(url)
else:
return HttpResponseRedirect(url)
else:
logger.warning(
"Gone: %s", request.path, extra={"status_code": 410, "request": request}
)
return HttpResponseGone()
|
def
get_redirect_url(self, *args, **kwargs):
RedirectView
¶
def
get_redirect_url(self, *args, **kwargs):
RedirectView
¶
Return the URL redirect to. Keyword arguments from the URL pattern match generating the redirect request are provided as kwargs to this method.
228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 | def get_redirect_url(self, *args, **kwargs):
"""
Return the URL redirect to. Keyword arguments from the URL pattern
match generating the redirect request are provided as kwargs to this
method.
"""
if self.url:
url = self.url % kwargs
elif self.pattern_name:
url = reverse(self.pattern_name, args=args, kwargs=kwargs)
else:
return None
args = self.request.META.get("QUERY_STRING", "")
if args and self.query_string:
url = "%s?%s" % (url, args)
return url
|
def
head(self, request, *args, **kwargs):
RedirectView
¶
def
head(self, request, *args, **kwargs):
RedirectView
¶
259 260 | def head(self, request, *args, **kwargs):
return self.get(request, *args, **kwargs)
|
def
http_method_not_allowed(self, request, *args, **kwargs):
View
¶
def
http_method_not_allowed(self, request, *args, **kwargs):
View
¶
144 145 146 147 148 149 150 151 | def http_method_not_allowed(self, request, *args, **kwargs):
logger.warning(
"Method Not Allowed (%s): %s",
request.method,
request.path,
extra={"status_code": 405, "request": request},
)
return HttpResponseNotAllowed(self._allowed_methods())
|
def
options(self, request, *args, **kwargs):
¶
def
options(self, request, *args, **kwargs):
¶
RedirectView
Handle responding to requests for the OPTIONS HTTP verb.
265 266 | def options(self, request, *args, **kwargs):
return self.get(request, *args, **kwargs)
|
View
Handle responding to requests for the OPTIONS HTTP verb.
153 154 155 156 157 158 159 160 161 162 163 | def options(self, request, *args, **kwargs):
"""Handle responding to requests for the OPTIONS HTTP verb."""
response = HttpResponse()
response.headers["Allow"] = ", ".join(self._allowed_methods())
response.headers["Content-Length"] = "0"
if self.view_is_async:
async def func():
return response
return func()
else:
return response
|
def
patch(self, request, *args, **kwargs):
RedirectView
¶
def
patch(self, request, *args, **kwargs):
RedirectView
¶
274 275 | def patch(self, request, *args, **kwargs):
return self.get(request, *args, **kwargs)
|
def
post(self, request, *args, **kwargs):
RedirectView
¶
def
post(self, request, *args, **kwargs):
RedirectView
¶
262 263 | def post(self, request, *args, **kwargs):
return self.get(request, *args, **kwargs)
|
def
put(self, request, *args, **kwargs):
RedirectView
¶
def
put(self, request, *args, **kwargs):
RedirectView
¶
271 272 | def put(self, request, *args, **kwargs):
return self.get(request, *args, **kwargs)
|
def
setup(self, request, *args, **kwargs):
View
¶
def
setup(self, request, *args, **kwargs):
View
¶
Initialize attributes shared by all view methods.
124 125 126 127 128 129 130 | def setup(self, request, *args, **kwargs):
"""Initialize attributes shared by all view methods."""
if hasattr(self, "get") and not hasattr(self, "head"):
self.head = self.get
self.request = request
self.args = args
self.kwargs = kwargs
|