Python Django Forms Forms Validate a Form in a View

Aaron Newberry
Aaron Newberry
440 Points

Challenge Task 2 of 2 of django forms

I am not sure what to do here with

Challenge Task 2 of 2 Alright, so let's make this useful. If the POSTed data is valid (so the form is valid), use send_lead to send an email. You can get email and url from form.cleaned_data but, remember, we named the URL field "link". Leave everything else alone.

myproject/views.py
from django.core.mail import send_mail
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from django.shortcuts import render

from . import forms


def send_lead(email, url):
    send_mail(
        'Lead from {}'.format(form.cleaned_data['email']),
         form.cleaned_data['link'],
        '{} submitted {}'.format(email, url),
        email,
        ['kenneth@teamtreehouse.com']
    )


def lead_form(request):
    form = forms.LeadShareForm()
    if request.method == 'POST':
        form = forms.LeadShareForm(request.POST)
        if form.is_valid():
            return HttpResponseRedirect(reverse("lead"))
    return render(request, 'lead_form.html', {'form': form})

1 Answer

Hasan Ahmad
Hasan Ahmad
6,724 Points

Firstly, you do not need to alter send_lead(). That function is just to send an email. Also, you needed to add form.cleaned_data to the lead_form view to get access to the data. Here is my solution

def send_lead(email, url):
    send_mail(
        'Lead from {}'.format(email),
        '{} submitted {}'.format(email, url),
        email,
        ['kenneth@teamtreehouse.com']
    )


def lead_form(request):
    form = forms.LeadShareForm()
    if request.method == 'POST':
        form = forms.LeadShareForm(request.POST)
        if form.is_valid():
            email = form.cleaned_data['email']
            url = form.cleaned_data['link']
            send_lead(email, url)
            return HttpResponseRedirect(reverse("lead"))
    return render(request, 'lead_form.html', {'form': form})