urls.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. from django import forms
  2. from django.contrib import messages
  3. from django.contrib.messages.views import SuccessMessageMixin
  4. from django.http import HttpResponse, HttpResponseRedirect
  5. from django.template import engines
  6. from django.template.response import TemplateResponse
  7. from django.urls import path, re_path, reverse
  8. from django.views.decorators.cache import never_cache
  9. from django.views.generic.edit import FormView
  10. TEMPLATE = """{% if messages %}
  11. <ul class="messages">
  12. {% for message in messages %}
  13. <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>
  14. {{ message }}
  15. </li>
  16. {% endfor %}
  17. </ul>
  18. {% endif %}
  19. """
  20. @never_cache
  21. def add(request, message_type):
  22. # Don't default to False here to test that it defaults to False if
  23. # unspecified.
  24. fail_silently = request.POST.get('fail_silently', None)
  25. for msg in request.POST.getlist('messages'):
  26. if fail_silently is not None:
  27. getattr(messages, message_type)(request, msg, fail_silently=fail_silently)
  28. else:
  29. getattr(messages, message_type)(request, msg)
  30. return HttpResponseRedirect(reverse('show_message'))
  31. @never_cache
  32. def add_template_response(request, message_type):
  33. for msg in request.POST.getlist('messages'):
  34. getattr(messages, message_type)(request, msg)
  35. return HttpResponseRedirect(reverse('show_template_response'))
  36. @never_cache
  37. def show(request):
  38. template = engines['django'].from_string(TEMPLATE)
  39. return HttpResponse(template.render(request=request))
  40. @never_cache
  41. def show_template_response(request):
  42. template = engines['django'].from_string(TEMPLATE)
  43. return TemplateResponse(request, template)
  44. class ContactForm(forms.Form):
  45. name = forms.CharField(required=True)
  46. slug = forms.SlugField(required=True)
  47. class ContactFormViewWithMsg(SuccessMessageMixin, FormView):
  48. form_class = ContactForm
  49. success_url = show
  50. success_message = "%(name)s was created successfully"
  51. urlpatterns = [
  52. re_path('^add/(debug|info|success|warning|error)/$', add, name='add_message'),
  53. path('add/msg/', ContactFormViewWithMsg.as_view(), name='add_success_msg'),
  54. path('show/', show, name='show_message'),
  55. re_path(
  56. '^template_response/add/(debug|info|success|warning|error)/$',
  57. add_template_response, name='add_template_response',
  58. ),
  59. path('template_response/show/', show_template_response, name='show_template_response'),
  60. ]