一.修改settings.py的内容如下
二.修改django_test/forms.py的内容如下
from django import forms from django.contrib.auth.models import User from django.contrib.auth.forms import UserCreationForm class MyRegistrationForm(UserCreationForm): email = forms.EmailField(required=True) class Meta: model = User fields = ('username', 'email', 'password1', 'password2') def save(self, commit=True): user = super(MyRegistrationForm, self).save(commit=False) user.email = self.cleaned_data['email'] # user.set_password(self.cleaned_data['password1']) if commit: user.save() return user class ContactForm1(forms.Form): subject = forms.CharField(max_length=100) class ContactForm2(forms.Form): sender = forms.EmailField() class ContactForm3(forms.Form): message = forms.CharField(widget=forms.Textarea)
三.修改django_test/views.py的内容如下
from django.contrib.formtools.wizard.views import SessionWizardView from django.core.mail import send_mail import logging logr = logging.getLogger(__name__) class ContactWizard(SessionWizardView): template_name = "contact_form.html" def done(self, form_list, **kwargs): form_data = process_form_data(form_list) return render_to_response('done.html', {'form_data': form_data}) def process_form_data(form_list): form_data = [form.cleaned_data for form in form_list] logr.debug(form_data[0]['subject']) logr.debug(form_data[1]['sender']) logr.debug(form_data[2]['message']) send_mail(form_data[0]['subject'], form_data[2]['message'], form_data[1]['sender'], ['[email protected]'], fail_silently=False) return form_data
四.修改django_test/templates/contact_form.html的内容如下
{% extends "base.html" %} {% block content %} <h2>Contact Us</h2> <p>Step {{ wizard.steps.step1 }} of {{ wizard.steps.count }}</p> {% for field in form %} {{field.error}} {% endfor %} <form action="/contact/" method="post">{% csrf_token %} <table> {{ wizard.management_form }} {% if wizard.form.forms %} {{ wizard.form.management_form }} {% for form in wizard.form.forms %} {{ form }} {% endfor %} {% else %} {{ wizard.form }} {% endif %} </table> {% if wizard.steps.prev %} <button name="wizard_goto_step" type="submit" value="{{ wizard.steps.first }}">"first step"</button> <button name="wizard_goto_step" type="submit" value="{{ wizard.steps.prev }}">"prev step"</button> {% endif %} <input type="submit" value="Submit" /> </form> {% endblock %}四.修改django_test/templates/done.html的内容如下
{% extends "base.html" %} {% block content %} <h2>Thanks for contacting us!</h2> {% for form in form_data %} {{form}} {% endfor %} {% endblock %}
五.修改django_test/urls.py的内容如下
from django_test.forms import ContactForm1, ContactForm2, ContactForm3 from django_test.views import ContactWizard ... url(r'^contact/$', ContactWizard.as_view([ContactForm1, ContactForm2, ContactForm3])), ...
六.效果如图