PageRenderTime 24ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/modeltests/test_client/views.py

https://code.google.com/p/mango-py/
Python | 214 lines | 200 code | 9 blank | 5 comment | 9 complexity | b0b9cc0a6c81fe62778d93cc1eb5f30a MD5 | raw file
Possible License(s): BSD-3-Clause
  1. from xml.dom.minidom import parseString
  2. from django.core import mail
  3. from django.template import Context, Template
  4. from django.http import HttpResponse, HttpResponseRedirect, HttpResponseNotFound
  5. from django.contrib.auth.decorators import login_required, permission_required
  6. from django.forms.forms import Form
  7. from django.forms import fields
  8. from django.shortcuts import render_to_response
  9. from django.utils.decorators import method_decorator
  10. def get_view(request):
  11. "A simple view that expects a GET request, and returns a rendered template"
  12. t = Template('This is a test. {{ var }} is the value.', name='GET Template')
  13. c = Context({'var': request.GET.get('var', 42)})
  14. return HttpResponse(t.render(c))
  15. def post_view(request):
  16. """A view that expects a POST, and returns a different template depending
  17. on whether any POST data is available
  18. """
  19. if request.method == 'POST':
  20. if request.POST:
  21. t = Template('Data received: {{ data }} is the value.', name='POST Template')
  22. c = Context({'data': request.POST['value']})
  23. else:
  24. t = Template('Viewing POST page.', name='Empty POST Template')
  25. c = Context()
  26. else:
  27. t = Template('Viewing GET page.', name='Empty GET Template')
  28. c = Context()
  29. return HttpResponse(t.render(c))
  30. def view_with_header(request):
  31. "A view that has a custom header"
  32. response = HttpResponse()
  33. response['X-DJANGO-TEST'] = 'Slartibartfast'
  34. return response
  35. def raw_post_view(request):
  36. """A view which expects raw XML to be posted and returns content extracted
  37. from the XML"""
  38. if request.method == 'POST':
  39. root = parseString(request.raw_post_data)
  40. first_book = root.firstChild.firstChild
  41. title, author = [n.firstChild.nodeValue for n in first_book.childNodes]
  42. t = Template("{{ title }} - {{ author }}", name="Book template")
  43. c = Context({"title": title, "author": author})
  44. else:
  45. t = Template("GET request.", name="Book GET template")
  46. c = Context()
  47. return HttpResponse(t.render(c))
  48. def redirect_view(request):
  49. "A view that redirects all requests to the GET view"
  50. if request.GET:
  51. from urllib import urlencode
  52. query = '?' + urlencode(request.GET, True)
  53. else:
  54. query = ''
  55. return HttpResponseRedirect('/test_client/get_view/' + query)
  56. def view_with_secure(request):
  57. "A view that indicates if the request was secure"
  58. response = HttpResponse()
  59. response.test_was_secure_request = request.is_secure()
  60. return response
  61. def double_redirect_view(request):
  62. "A view that redirects all requests to a redirection view"
  63. return HttpResponseRedirect('/test_client/permanent_redirect_view/')
  64. def bad_view(request):
  65. "A view that returns a 404 with some error content"
  66. return HttpResponseNotFound('Not found!. This page contains some MAGIC content')
  67. TestChoices = (
  68. ('a', 'First Choice'),
  69. ('b', 'Second Choice'),
  70. ('c', 'Third Choice'),
  71. ('d', 'Fourth Choice'),
  72. ('e', 'Fifth Choice')
  73. )
  74. class TestForm(Form):
  75. text = fields.CharField()
  76. email = fields.EmailField()
  77. value = fields.IntegerField()
  78. single = fields.ChoiceField(choices=TestChoices)
  79. multi = fields.MultipleChoiceField(choices=TestChoices)
  80. def form_view(request):
  81. "A view that tests a simple form"
  82. if request.method == 'POST':
  83. form = TestForm(request.POST)
  84. if form.is_valid():
  85. t = Template('Valid POST data.', name='Valid POST Template')
  86. c = Context()
  87. else:
  88. t = Template('Invalid POST data. {{ form.errors }}', name='Invalid POST Template')
  89. c = Context({'form': form})
  90. else:
  91. form = TestForm(request.GET)
  92. t = Template('Viewing base form. {{ form }}.', name='Form GET Template')
  93. c = Context({'form': form})
  94. return HttpResponse(t.render(c))
  95. def form_view_with_template(request):
  96. "A view that tests a simple form"
  97. if request.method == 'POST':
  98. form = TestForm(request.POST)
  99. if form.is_valid():
  100. message = 'POST data OK'
  101. else:
  102. message = 'POST data has errors'
  103. else:
  104. form = TestForm()
  105. message = 'GET form page'
  106. return render_to_response('form_view.html',
  107. {
  108. 'form': form,
  109. 'message': message
  110. }
  111. )
  112. def login_protected_view(request):
  113. "A simple view that is login protected."
  114. t = Template('This is a login protected test. Username is {{ user.username }}.', name='Login Template')
  115. c = Context({'user': request.user})
  116. return HttpResponse(t.render(c))
  117. login_protected_view = login_required(login_protected_view)
  118. def login_protected_view_changed_redirect(request):
  119. "A simple view that is login protected with a custom redirect field set"
  120. t = Template('This is a login protected test. Username is {{ user.username }}.', name='Login Template')
  121. c = Context({'user': request.user})
  122. return HttpResponse(t.render(c))
  123. login_protected_view_changed_redirect = login_required(redirect_field_name="redirect_to")(login_protected_view_changed_redirect)
  124. def permission_protected_view(request):
  125. "A simple view that is permission protected."
  126. t = Template('This is a permission protected test. '
  127. 'Username is {{ user.username }}. '
  128. 'Permissions are {{ user.get_all_permissions }}.' ,
  129. name='Permissions Template')
  130. c = Context({'user': request.user})
  131. return HttpResponse(t.render(c))
  132. permission_protected_view = permission_required('modeltests.test_perm')(permission_protected_view)
  133. class _ViewManager(object):
  134. @method_decorator(login_required)
  135. def login_protected_view(self, request):
  136. t = Template('This is a login protected test using a method. '
  137. 'Username is {{ user.username }}.',
  138. name='Login Method Template')
  139. c = Context({'user': request.user})
  140. return HttpResponse(t.render(c))
  141. @method_decorator(permission_required('modeltests.test_perm'))
  142. def permission_protected_view(self, request):
  143. t = Template('This is a permission protected test using a method. '
  144. 'Username is {{ user.username }}. '
  145. 'Permissions are {{ user.get_all_permissions }}.' ,
  146. name='Permissions Template')
  147. c = Context({'user': request.user})
  148. return HttpResponse(t.render(c))
  149. _view_manager = _ViewManager()
  150. login_protected_method_view = _view_manager.login_protected_view
  151. permission_protected_method_view = _view_manager.permission_protected_view
  152. def session_view(request):
  153. "A view that modifies the session"
  154. request.session['tobacconist'] = 'hovercraft'
  155. t = Template('This is a view that modifies the session.',
  156. name='Session Modifying View Template')
  157. c = Context()
  158. return HttpResponse(t.render(c))
  159. def broken_view(request):
  160. """A view which just raises an exception, simulating a broken view."""
  161. raise KeyError("Oops! Looks like you wrote some bad code.")
  162. def mail_sending_view(request):
  163. mail.EmailMessage(
  164. "Test message",
  165. "This is a test email",
  166. "from@example.com",
  167. ['first@example.com', 'second@example.com']).send()
  168. return HttpResponse("Mail sent")
  169. def mass_mail_sending_view(request):
  170. m1 = mail.EmailMessage(
  171. 'First Test message',
  172. 'This is the first test email',
  173. 'from@example.com',
  174. ['first@example.com', 'second@example.com'])
  175. m2 = mail.EmailMessage(
  176. 'Second Test message',
  177. 'This is the second test email',
  178. 'from@example.com',
  179. ['second@example.com', 'third@example.com'])
  180. c = mail.get_connection()
  181. c.send_messages([m1,m2])
  182. return HttpResponse("Mail sent")