While I am studying the new django docs on class-based views, I notice this example code:
# forms.py
from django import forms
class ContactForm(forms.Form):
name = forms.CharField()
message = forms.CharField(widget=forms.Textarea)
def send_email(self):
# send email using the self.cleaned_data dictionary
pass
The fact of seeing send_email as a method of ContactForm really annoys me. I have always thought form methods should be for validation purpose and methods that consume forms (like send_email in this case) should be in the views layer. Am I missing anything here? Or should the example be corrected?
The first time I got the same weird feeling was when I encountered the
LoginFormfromdjango.contrib.auththat also verifies that the user’s browser is capable of working with cookies aside from managing the credentials passed in.Personally, I agree with you. I’m more inclined to think that the view should be the responsible actor for performing the action of sending the email rather than the form and that
send_emailshould be a method defined in the view.But, then again, you can easily observe how a lot of us use Django differently or have a different approach to solving the same problems. Due to the fact that we have different concerns in mind when developing our applications, it’s quite possible we have a different understanding of how certain framework components are meant to be used, which is a bit of a moot point. In the end, what’s important to acknowledge is that it’s possible to delegate some of the heavy-lifting from the view to the form in a manner that’s well-defined.