~ubuntu-branches/debian/squeeze/python-django/squeeze

« back to all changes in this revision

Viewing changes to tests/modeltests/test_client/views.py

  • Committer: Bazaar Package Importer
  • Author(s): Chris Lamb, Chris Lamb, David Spreen, Sandro Tosi
  • Date: 2008-11-19 21:31:00 UTC
  • mfrom: (1.2.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20081119213100-gp0lqhxl1qxa6dgl
Tags: 1.0.2-1
[ Chris Lamb ]
* New upstream bugfix release. Closes: #505783
* Add myself to Uploaders with ACK from Brett.

[ David Spreen ]
* Remove python-pysqlite2 from Recommends because Python 2.5 includes
  sqlite library used by Django. Closes: 497886

[ Sandro Tosi ]
* debian/control
  - switch Vcs-Browser field to viewsvn

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
from xml.dom.minidom import parseString
2
 
 
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
10
 
 
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)})
15
 
 
16
 
    return HttpResponse(t.render(c))
17
 
 
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
21
 
    """
22
 
    if request.method == 'POST':
23
 
        if request.POST:
24
 
            t = Template('Data received: {{ data }} is the value.', name='POST Template')
25
 
            c = Context({'data': request.POST['value']})
26
 
        else:
27
 
            t = Template('Viewing POST page.', name='Empty POST Template')
28
 
            c = Context()
29
 
    else:
30
 
        t = Template('Viewing GET page.', name='Empty GET Template')
31
 
        c = Context()
32
 
 
33
 
    return HttpResponse(t.render(c))
34
 
 
35
 
def view_with_header(request):
36
 
    "A view that has a custom header"
37
 
    response = HttpResponse()
38
 
    response['X-DJANGO-TEST'] = 'Slartibartfast'
39
 
    return response
40
 
        
41
 
def raw_post_view(request):
42
 
    """A view which expects raw XML to be posted and returns content extracted
43
 
    from the XML"""
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})
50
 
    else:
51
 
        t = Template("GET request.", name="Book GET template")
52
 
        c = Context()
53
 
 
54
 
    return HttpResponse(t.render(c))
55
 
 
56
 
def redirect_view(request):
57
 
    "A view that redirects all requests to the GET view"
58
 
    if request.GET:
59
 
        from urllib import urlencode
60
 
        query = '?' + urlencode(request.GET, True)
61
 
    else:
62
 
        query = ''
63
 
    return HttpResponseRedirect('/test_client/get_view/' + query)
64
 
 
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/')
68
 
 
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')
72
 
 
73
 
TestChoices = (
74
 
    ('a', 'First Choice'),
75
 
    ('b', 'Second Choice'),
76
 
    ('c', 'Third Choice'),
77
 
    ('d', 'Fourth Choice'),
78
 
    ('e', 'Fifth Choice')
79
 
)
80
 
 
81
 
class TestForm(Form):
82
 
    text = fields.CharField()
83
 
    email = fields.EmailField()
84
 
    value = fields.IntegerField()
85
 
    single = fields.ChoiceField(choices=TestChoices)
86
 
    multi = fields.MultipleChoiceField(choices=TestChoices)
87
 
 
88
 
def form_view(request):
89
 
    "A view that tests a simple form"
90
 
    if request.method == 'POST':
91
 
        form = TestForm(request.POST)
92
 
        if form.is_valid():
93
 
            t = Template('Valid POST data.', name='Valid POST Template')
94
 
            c = Context()
95
 
        else:
96
 
            t = Template('Invalid POST data. {{ form.errors }}', name='Invalid POST Template')
97
 
            c = Context({'form': form})
98
 
    else:
99
 
        form = TestForm(request.GET)
100
 
        t = Template('Viewing base form. {{ form }}.', name='Form GET Template')
101
 
        c = Context({'form': form})
102
 
 
103
 
    return HttpResponse(t.render(c))
104
 
 
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)
109
 
        if form.is_valid():
110
 
            message = 'POST data OK'
111
 
        else:
112
 
            message = 'POST data has errors'
113
 
    else:
114
 
        form = TestForm()
115
 
        message = 'GET form page'
116
 
    return render_to_response('form_view.html',
117
 
        {
118
 
            'form': form,
119
 
            'message': message
120
 
        }
121
 
    )
122
 
 
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})
127
 
 
128
 
    return HttpResponse(t.render(c))
129
 
login_protected_view = login_required(login_protected_view)
130
 
 
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})
135
 
    
136
 
    return HttpResponse(t.render(c))
137
 
login_protected_view_changed_redirect = login_required(redirect_field_name="redirect_to")(login_protected_view_changed_redirect)
138
 
 
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)
148
 
 
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)
157
 
 
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)
166
 
 
167
 
_view_manager = _ViewManager()
168
 
login_protected_method_view = _view_manager.login_protected_view
169
 
permission_protected_method_view = _view_manager.permission_protected_view
170
 
 
171
 
def session_view(request):
172
 
    "A view that modifies the session"
173
 
    request.session['tobacconist'] = 'hovercraft'
174
 
 
175
 
    t = Template('This is a view that modifies the session.',
176
 
                 name='Session Modifying View Template')
177
 
    c = Context()
178
 
    return HttpResponse(t.render(c))
179
 
 
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.")
183
 
 
184
 
def mail_sending_view(request):
185
 
    EmailMessage(
186
 
        "Test message",
187
 
        "This is a test email",
188
 
        "from@example.com",
189
 
        ['first@example.com', 'second@example.com']).send()
190
 
    return HttpResponse("Mail sent")
191
 
 
192
 
def mass_mail_sending_view(request):
193
 
    m1 = EmailMessage(
194
 
        'First Test message',
195
 
        'This is the first test email',
196
 
        'from@example.com',
197
 
        ['first@example.com', 'second@example.com'])
198
 
    m2 = EmailMessage(
199
 
        'Second Test message',
200
 
        'This is the second test email',
201
 
        'from@example.com',
202
 
        ['second@example.com', 'third@example.com'])
203
 
 
204
 
    c = SMTPConnection()
205
 
    c.send_messages([m1,m2])
206
 
 
207
 
    return HttpResponse("Mail sent")