1
from xml.dom.minidom import parseString
3
from django.core.mail import EmailMessage, SMTPConnection
4
from django.template import Context, Template
5
from django.http import HttpResponse, HttpResponseRedirect, HttpResponseNotFound
6
from django.contrib.auth.decorators import login_required, permission_required
7
from django.forms.forms import Form
8
from django.forms import fields
9
from django.shortcuts import render_to_response
11
def get_view(request):
12
"A simple view that expects a GET request, and returns a rendered template"
13
t = Template('This is a test. {{ var }} is the value.', name='GET Template')
14
c = Context({'var': request.GET.get('var', 42)})
16
return HttpResponse(t.render(c))
18
def post_view(request):
19
"""A view that expects a POST, and returns a different template depending
20
on whether any POST data is available
22
if request.method == 'POST':
24
t = Template('Data received: {{ data }} is the value.', name='POST Template')
25
c = Context({'data': request.POST['value']})
27
t = Template('Viewing POST page.', name='Empty POST Template')
30
t = Template('Viewing GET page.', name='Empty GET Template')
33
return HttpResponse(t.render(c))
35
def view_with_header(request):
36
"A view that has a custom header"
37
response = HttpResponse()
38
response['X-DJANGO-TEST'] = 'Slartibartfast'
41
def raw_post_view(request):
42
"""A view which expects raw XML to be posted and returns content extracted
44
if request.method == 'POST':
45
root = parseString(request.raw_post_data)
46
first_book = root.firstChild.firstChild
47
title, author = [n.firstChild.nodeValue for n in first_book.childNodes]
48
t = Template("{{ title }} - {{ author }}", name="Book template")
49
c = Context({"title": title, "author": author})
51
t = Template("GET request.", name="Book GET template")
54
return HttpResponse(t.render(c))
56
def redirect_view(request):
57
"A view that redirects all requests to the GET view"
59
from urllib import urlencode
60
query = '?' + urlencode(request.GET, True)
63
return HttpResponseRedirect('/test_client/get_view/' + query)
65
def double_redirect_view(request):
66
"A view that redirects all requests to a redirection view"
67
return HttpResponseRedirect('/test_client/permanent_redirect_view/')
69
def bad_view(request):
70
"A view that returns a 404 with some error content"
71
return HttpResponseNotFound('Not found!. This page contains some MAGIC content')
74
('a', 'First Choice'),
75
('b', 'Second Choice'),
76
('c', 'Third Choice'),
77
('d', 'Fourth Choice'),
82
text = fields.CharField()
83
email = fields.EmailField()
84
value = fields.IntegerField()
85
single = fields.ChoiceField(choices=TestChoices)
86
multi = fields.MultipleChoiceField(choices=TestChoices)
88
def form_view(request):
89
"A view that tests a simple form"
90
if request.method == 'POST':
91
form = TestForm(request.POST)
93
t = Template('Valid POST data.', name='Valid POST Template')
96
t = Template('Invalid POST data. {{ form.errors }}', name='Invalid POST Template')
97
c = Context({'form': form})
99
form = TestForm(request.GET)
100
t = Template('Viewing base form. {{ form }}.', name='Form GET Template')
101
c = Context({'form': form})
103
return HttpResponse(t.render(c))
105
def form_view_with_template(request):
106
"A view that tests a simple form"
107
if request.method == 'POST':
108
form = TestForm(request.POST)
110
message = 'POST data OK'
112
message = 'POST data has errors'
115
message = 'GET form page'
116
return render_to_response('form_view.html',
123
def login_protected_view(request):
124
"A simple view that is login protected."
125
t = Template('This is a login protected test. Username is {{ user.username }}.', name='Login Template')
126
c = Context({'user': request.user})
128
return HttpResponse(t.render(c))
129
login_protected_view = login_required(login_protected_view)
131
def login_protected_view_changed_redirect(request):
132
"A simple view that is login protected with a custom redirect field set"
133
t = Template('This is a login protected test. Username is {{ user.username }}.', name='Login Template')
134
c = Context({'user': request.user})
136
return HttpResponse(t.render(c))
137
login_protected_view_changed_redirect = login_required(redirect_field_name="redirect_to")(login_protected_view_changed_redirect)
139
def permission_protected_view(request):
140
"A simple view that is permission protected."
141
t = Template('This is a permission protected test. '
142
'Username is {{ user.username }}. '
143
'Permissions are {{ user.get_all_permissions }}.' ,
144
name='Permissions Template')
145
c = Context({'user': request.user})
146
return HttpResponse(t.render(c))
147
permission_protected_view = permission_required('modeltests.test_perm')(permission_protected_view)
149
class _ViewManager(object):
150
def login_protected_view(self, request):
151
t = Template('This is a login protected test using a method. '
152
'Username is {{ user.username }}.',
153
name='Login Method Template')
154
c = Context({'user': request.user})
155
return HttpResponse(t.render(c))
156
login_protected_view = login_required(login_protected_view)
158
def permission_protected_view(self, request):
159
t = Template('This is a permission protected test using a method. '
160
'Username is {{ user.username }}. '
161
'Permissions are {{ user.get_all_permissions }}.' ,
162
name='Permissions Template')
163
c = Context({'user': request.user})
164
return HttpResponse(t.render(c))
165
permission_protected_view = permission_required('modeltests.test_perm')(permission_protected_view)
167
_view_manager = _ViewManager()
168
login_protected_method_view = _view_manager.login_protected_view
169
permission_protected_method_view = _view_manager.permission_protected_view
171
def session_view(request):
172
"A view that modifies the session"
173
request.session['tobacconist'] = 'hovercraft'
175
t = Template('This is a view that modifies the session.',
176
name='Session Modifying View Template')
178
return HttpResponse(t.render(c))
180
def broken_view(request):
181
"""A view which just raises an exception, simulating a broken view."""
182
raise KeyError("Oops! Looks like you wrote some bad code.")
184
def mail_sending_view(request):
187
"This is a test email",
189
['first@example.com', 'second@example.com']).send()
190
return HttpResponse("Mail sent")
192
def mass_mail_sending_view(request):
194
'First Test message',
195
'This is the first test email',
197
['first@example.com', 'second@example.com'])
199
'Second Test message',
200
'This is the second test email',
202
['second@example.com', 'third@example.com'])
205
c.send_messages([m1,m2])
207
return HttpResponse("Mail sent")