Commit 9a85ad89 authored by Paul Collins's avatar Paul Collins Committed by Preston Holmes
Browse files

Fixed #16319 -- added SuccessMessageMixin to contrib.messages

Thanks martinogden for the initial patch and d1ffuz0r for tests.
parent 5938e701
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -607,6 +607,7 @@ answer newbie questions, and generally made Django that much better:
    Cheng Zhang
    Hannes Struß <x@hannesstruss.de>
    Deric Crago <deric.crago@gmail.com>
    Paul Collins <paul.collins.iii@gmail.com>

A big THANK YOU goes to:

+1 −0
Original line number Diff line number Diff line
@@ -2,3 +2,4 @@ from django.contrib.messages.tests.cookie import CookieTest
from django.contrib.messages.tests.fallback import FallbackTest
from django.contrib.messages.tests.middleware import MiddlewareTest
from django.contrib.messages.tests.session import SessionTest
from django.contrib.messages.tests.mixins import SuccessMessageMixinTests
+14 −0
Original line number Diff line number Diff line
from django.test.testcases import TestCase
from django.contrib.messages.tests.urls import ContactFormViewWithMsg
from django.core.urlresolvers import reverse

class SuccessMessageMixinTests(TestCase):
    urls = 'django.contrib.messages.tests.urls'

    def test_set_messages_success(self):
        author = {'name': 'John Doe',
                  'slug': 'success-msg'}
        add_url = reverse('add_success_msg')
        req = self.client.post(add_url, author)
        self.assertIn(ContactFormViewWithMsg.success_message % author,
                      req.cookies['messages'].value)
+17 −1
Original line number Diff line number Diff line
from django.conf.urls import patterns
from django.conf.urls import patterns, url
from django.contrib import messages
from django.core.urlresolvers import reverse
from django import forms
from django.http import HttpResponseRedirect, HttpResponse
from django.template import RequestContext, Template
from django.template.response import TemplateResponse
from django.views.decorators.cache import never_cache
from django.contrib.messages.views import SuccessMessageMixin
from django.views.generic.edit import FormView

TEMPLATE = """{% if messages %}
<ul class="messages">
@@ -49,8 +52,21 @@ def show(request):
def show_template_response(request):
    return TemplateResponse(request, Template(TEMPLATE))


class ContactForm(forms.Form):
    name = forms.CharField(required=True)
    slug = forms.SlugField(required=True)


class ContactFormViewWithMsg(SuccessMessageMixin, FormView):
    form_class = ContactForm
    success_url = show
    success_message = "%(name)s was created successfully"


urlpatterns = patterns('',
    ('^add/(debug|info|success|warning|error)/$', add),
    url('^add/msg/$', ContactFormViewWithMsg.as_view(), name='add_success_msg'),
    ('^show/$', show),
    ('^template_response/add/(debug|info|success|warning|error)/$', add_template_response),
    ('^template_response/show/$', show_template_response),
+19 −0
Original line number Diff line number Diff line
from django.views.generic.edit import FormMixin
from django.contrib import messages


class SuccessMessageMixin(FormMixin):
    """
    Adds a success message on successful form submission.
    """
    success_message = ''

    def form_valid(self, form):
        response = super(SuccessMessageMixin, self).form_valid(form)
        success_message = self.get_success_message(form.cleaned_data)
        if success_message:
            messages.success(self.request, success_message)
        return response

    def get_success_message(self, cleaned_data):
        return self.success_message % cleaned_data
Loading