Класс RedirectView (Django 3.2)

from django.views.generic import RedirectView

Provide a redirect on any GET request.

Предки (MRO)

  1. RedirectView
  2. View

Атрибуты

  Определено в
http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace'] View
pattern_name = None RedirectView
permanent = False RedirectView
query_string = False RedirectView
url = None RedirectView

Методы

def _allowed_methods(self):
    return [m.upper() for m in self.http_method_names if hasattr(self, m)]

Main entry point for a request-response process.

@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
    # take name and docstring from class
    update_wrapper(view, cls, updated=())
    # and possible attributes set by decorators
    # like csrf_exempt from dispatch
    update_wrapper(view, cls.dispatch, assigned=())
    return view
def delete(self, request, *args, **kwargs):
    return self.get(request, *args, **kwargs)
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):
    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()

Return the URL redirect to. Keyword arguments from the URL pattern match generating the redirect request are provided as kwargs to this method.

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):
    return self.get(request, *args, **kwargs)
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())

Constructor. Called in the URLconf; can contain helpful extra keyword arguments, and other things.

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)
RedirectView

Handle responding to requests for the OPTIONS HTTP verb.

def options(self, request, *args, **kwargs):
    return self.get(request, *args, **kwargs)
View

Handle responding to requests for the OPTIONS HTTP verb.

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'
    return response
def patch(self, request, *args, **kwargs):
    return self.get(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
    return self.get(request, *args, **kwargs)
def put(self, request, *args, **kwargs):
    return self.get(request, *args, **kwargs)

Initialize attributes shared by all view methods.

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