class BaseFormView

from django.views.generic.edit import BaseFormView
A base view for displaying a form

Descendants

Attributes

  Defined in
form_class = None FormMixin
http_method_names = [u'get', u'post', u'put', u'patch', u'delete', u'head', u'options', u'trace'] View
initial = {} FormMixin
prefix = None FormMixin
success_url = None FormMixin
Expand Collapse

Methods

def _allowed_methods(self): View

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

def as_view(cls, **initkwargs): View

Main entry point for a request-response process.
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
@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("You tried to pass in the %s method name as a "
                            "keyword argument to %s(). Don't do that."
                            % (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)
        if hasattr(self, 'get') and not hasattr(self, 'head'):
            self.head = self.get
        self.request = request
        self.args = args
        self.kwargs = kwargs
        return self.dispatch(request, *args, **kwargs)
    # 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 dispatch(self, request, *args, **kwargs): View

81
82
83
84
85
86
87
88
89
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 form_invalid(self, form): FormMixin

If the form is invalid, re-render the context data with the
data-filled form and errors.
110
111
112
113
114
115
def form_invalid(self, form):
    """
    If the form is invalid, re-render the context data with the
    data-filled form and errors.
    """
    return self.render_to_response(self.get_context_data(form=form))

def form_valid(self, form): FormMixin

If the form is valid, redirect to the supplied URL.
104
105
106
107
108
def form_valid(self, form):
    """
    If the form is valid, redirect to the supplied URL.
    """
    return HttpResponseRedirect(self.get_success_url())

def get(self, request, *args, **kwargs): ProcessFormView

Handles GET requests and instantiates a blank version of the form.
201
202
203
204
205
206
def get(self, request, *args, **kwargs):
    """
    Handles GET requests and instantiates a blank version of the form.
    """
    form = self.get_form()
    return self.render_to_response(self.get_context_data(form=form))

def get_context_data(self, **kwargs): ContextMixin

25
26
27
28
def get_context_data(self, **kwargs):
    if 'view' not in kwargs:
        kwargs['view'] = self
    return kwargs

def get_form(self, form_class=None): FormMixin

Returns an instance of the form to be used in this view.
68
69
70
71
72
73
74
def get_form(self, form_class=None):
    """
    Returns an instance of the form to be used in this view.
    """
    if form_class is None:
        form_class = self.get_form_class()
    return form_class(**self.get_form_kwargs())

def get_form_class(self): FormMixin

Returns the form class to use in this view
62
63
64
65
66
def get_form_class(self):
    """
    Returns the form class to use in this view
    """
    return self.form_class

def get_form_kwargs(self): FormMixin

Returns the keyword arguments for instantiating the form.
76
77
78
79
80
81
82
83
84
85
86
87
88
89
def get_form_kwargs(self):
    """
    Returns the keyword arguments for instantiating the form.
    """
    kwargs = {
        'initial': self.get_initial(),
        'prefix': self.get_prefix(),
    }
    if self.request.method in ('POST', 'PUT'):
        kwargs.update({
            'data': self.request.POST,
            'files': self.request.FILES,
        })
    return kwargs

def get_initial(self): FormMixin

Returns the initial data to use for forms on this view.
50
51
52
53
54
def get_initial(self):
    """
    Returns the initial data to use for forms on this view.
    """
    return self.initial.copy()

def get_prefix(self): FormMixin

Returns the prefix to use for forms on this view
56
57
58
59
60
def get_prefix(self):
    """
    Returns the prefix to use for forms on this view
    """
    return self.prefix

def get_success_url(self): FormMixin

Returns the supplied success URL.
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
def get_success_url(self):
    """
    Returns the supplied success URL.
    """
    if self.success_url:
        # Forcing possible reverse_lazy evaluation
        url = force_text(self.success_url)
    else:
        raise ImproperlyConfigured(
            "No URL to redirect to. Provide a success_url.")
    return url

def http_method_not_allowed(self, request, *args, **kwargs): View

91
92
93
94
95
96
97
98
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 http.HttpResponseNotAllowed(self._allowed_methods())

def __init__(self, **kwargs): View

Constructor. Called in the URLconf; can contain helpful extra
keyword arguments, and other things.
39
40
41
42
43
44
45
46
47
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 six.iteritems(kwargs):
        setattr(self, key, value)

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

Handles responding to requests for the OPTIONS HTTP verb.
100
101
102
103
104
105
106
107
def options(self, request, *args, **kwargs):
    """
    Handles responding to requests for the OPTIONS HTTP verb.
    """
    response = http.HttpResponse()
    response['Allow'] = ', '.join(self._allowed_methods())
    response['Content-Length'] = '0'
    return response

def post(self, request, *args, **kwargs): ProcessFormView

Handles POST requests, instantiating a form instance with the passed
POST variables and then checked for validity.
208
209
210
211
212
213
214
215
216
217
def post(self, request, *args, **kwargs):
    """
    Handles POST requests, instantiating a form instance with the passed
    POST variables and then checked for validity.
    """
    form = self.get_form()
    if form.is_valid():
        return self.form_valid(form)
    else:
        return self.form_invalid(form)

def put(self, *args, **kwargs): ProcessFormView

221
222
def put(self, *args, **kwargs):
    return self.post(*args, **kwargs)