mirror of
https://github.com/django/django.git
synced 2025-10-31 09:41:08 +00:00
Merged regressiontests and modeltests into the test root.
This commit is contained in:
218
tests/test_client/views.py
Normal file
218
tests/test_client/views.py
Normal file
@@ -0,0 +1,218 @@
|
||||
try:
|
||||
from urllib.parse import urlencode
|
||||
except ImportError: # Python 2
|
||||
from urllib import urlencode
|
||||
from xml.dom.minidom import parseString
|
||||
|
||||
from django.contrib.auth.decorators import login_required, permission_required
|
||||
from django.core import mail
|
||||
from django.forms import fields
|
||||
from django.forms.forms import Form
|
||||
from django.http import HttpResponse, HttpResponseRedirect, HttpResponseNotFound
|
||||
from django.shortcuts import render_to_response
|
||||
from django.template import Context, Template
|
||||
from django.utils.decorators import method_decorator
|
||||
|
||||
def get_view(request):
|
||||
"A simple view that expects a GET request, and returns a rendered template"
|
||||
t = Template('This is a test. {{ var }} is the value.', name='GET Template')
|
||||
c = Context({'var': request.GET.get('var', 42)})
|
||||
|
||||
return HttpResponse(t.render(c))
|
||||
|
||||
def post_view(request):
|
||||
"""A view that expects a POST, and returns a different template depending
|
||||
on whether any POST data is available
|
||||
"""
|
||||
if request.method == 'POST':
|
||||
if request.POST:
|
||||
t = Template('Data received: {{ data }} is the value.', name='POST Template')
|
||||
c = Context({'data': request.POST['value']})
|
||||
else:
|
||||
t = Template('Viewing POST page.', name='Empty POST Template')
|
||||
c = Context()
|
||||
else:
|
||||
t = Template('Viewing GET page.', name='Empty GET Template')
|
||||
c = Context()
|
||||
|
||||
return HttpResponse(t.render(c))
|
||||
|
||||
def view_with_header(request):
|
||||
"A view that has a custom header"
|
||||
response = HttpResponse()
|
||||
response['X-DJANGO-TEST'] = 'Slartibartfast'
|
||||
return response
|
||||
|
||||
def raw_post_view(request):
|
||||
"""A view which expects raw XML to be posted and returns content extracted
|
||||
from the XML"""
|
||||
if request.method == 'POST':
|
||||
root = parseString(request.body)
|
||||
first_book = root.firstChild.firstChild
|
||||
title, author = [n.firstChild.nodeValue for n in first_book.childNodes]
|
||||
t = Template("{{ title }} - {{ author }}", name="Book template")
|
||||
c = Context({"title": title, "author": author})
|
||||
else:
|
||||
t = Template("GET request.", name="Book GET template")
|
||||
c = Context()
|
||||
|
||||
return HttpResponse(t.render(c))
|
||||
|
||||
def redirect_view(request):
|
||||
"A view that redirects all requests to the GET view"
|
||||
if request.GET:
|
||||
query = '?' + urlencode(request.GET, True)
|
||||
else:
|
||||
query = ''
|
||||
return HttpResponseRedirect('/test_client/get_view/' + query)
|
||||
|
||||
def view_with_secure(request):
|
||||
"A view that indicates if the request was secure"
|
||||
response = HttpResponse()
|
||||
response.test_was_secure_request = request.is_secure()
|
||||
return response
|
||||
|
||||
def double_redirect_view(request):
|
||||
"A view that redirects all requests to a redirection view"
|
||||
return HttpResponseRedirect('/test_client/permanent_redirect_view/')
|
||||
|
||||
def bad_view(request):
|
||||
"A view that returns a 404 with some error content"
|
||||
return HttpResponseNotFound('Not found!. This page contains some MAGIC content')
|
||||
|
||||
TestChoices = (
|
||||
('a', 'First Choice'),
|
||||
('b', 'Second Choice'),
|
||||
('c', 'Third Choice'),
|
||||
('d', 'Fourth Choice'),
|
||||
('e', 'Fifth Choice')
|
||||
)
|
||||
|
||||
class TestForm(Form):
|
||||
text = fields.CharField()
|
||||
email = fields.EmailField()
|
||||
value = fields.IntegerField()
|
||||
single = fields.ChoiceField(choices=TestChoices)
|
||||
multi = fields.MultipleChoiceField(choices=TestChoices)
|
||||
|
||||
def form_view(request):
|
||||
"A view that tests a simple form"
|
||||
if request.method == 'POST':
|
||||
form = TestForm(request.POST)
|
||||
if form.is_valid():
|
||||
t = Template('Valid POST data.', name='Valid POST Template')
|
||||
c = Context()
|
||||
else:
|
||||
t = Template('Invalid POST data. {{ form.errors }}', name='Invalid POST Template')
|
||||
c = Context({'form': form})
|
||||
else:
|
||||
form = TestForm(request.GET)
|
||||
t = Template('Viewing base form. {{ form }}.', name='Form GET Template')
|
||||
c = Context({'form': form})
|
||||
|
||||
return HttpResponse(t.render(c))
|
||||
|
||||
def form_view_with_template(request):
|
||||
"A view that tests a simple form"
|
||||
if request.method == 'POST':
|
||||
form = TestForm(request.POST)
|
||||
if form.is_valid():
|
||||
message = 'POST data OK'
|
||||
else:
|
||||
message = 'POST data has errors'
|
||||
else:
|
||||
form = TestForm()
|
||||
message = 'GET form page'
|
||||
return render_to_response('form_view.html',
|
||||
{
|
||||
'form': form,
|
||||
'message': message
|
||||
}
|
||||
)
|
||||
|
||||
def login_protected_view(request):
|
||||
"A simple view that is login protected."
|
||||
t = Template('This is a login protected test. Username is {{ user.username }}.', name='Login Template')
|
||||
c = Context({'user': request.user})
|
||||
|
||||
return HttpResponse(t.render(c))
|
||||
login_protected_view = login_required(login_protected_view)
|
||||
|
||||
def login_protected_view_changed_redirect(request):
|
||||
"A simple view that is login protected with a custom redirect field set"
|
||||
t = Template('This is a login protected test. Username is {{ user.username }}.', name='Login Template')
|
||||
c = Context({'user': request.user})
|
||||
|
||||
return HttpResponse(t.render(c))
|
||||
login_protected_view_changed_redirect = login_required(redirect_field_name="redirect_to")(login_protected_view_changed_redirect)
|
||||
|
||||
def _permission_protected_view(request):
|
||||
"A simple view that is permission protected."
|
||||
t = Template('This is a permission protected test. '
|
||||
'Username is {{ user.username }}. '
|
||||
'Permissions are {{ user.get_all_permissions }}.' ,
|
||||
name='Permissions Template')
|
||||
c = Context({'user': request.user})
|
||||
return HttpResponse(t.render(c))
|
||||
permission_protected_view = permission_required('modeltests.test_perm')(_permission_protected_view)
|
||||
permission_protected_view_exception = permission_required('modeltests.test_perm', raise_exception=True)(_permission_protected_view)
|
||||
|
||||
class _ViewManager(object):
|
||||
@method_decorator(login_required)
|
||||
def login_protected_view(self, request):
|
||||
t = Template('This is a login protected test using a method. '
|
||||
'Username is {{ user.username }}.',
|
||||
name='Login Method Template')
|
||||
c = Context({'user': request.user})
|
||||
return HttpResponse(t.render(c))
|
||||
|
||||
@method_decorator(permission_required('modeltests.test_perm'))
|
||||
def permission_protected_view(self, request):
|
||||
t = Template('This is a permission protected test using a method. '
|
||||
'Username is {{ user.username }}. '
|
||||
'Permissions are {{ user.get_all_permissions }}.' ,
|
||||
name='Permissions Template')
|
||||
c = Context({'user': request.user})
|
||||
return HttpResponse(t.render(c))
|
||||
|
||||
_view_manager = _ViewManager()
|
||||
login_protected_method_view = _view_manager.login_protected_view
|
||||
permission_protected_method_view = _view_manager.permission_protected_view
|
||||
|
||||
def session_view(request):
|
||||
"A view that modifies the session"
|
||||
request.session['tobacconist'] = 'hovercraft'
|
||||
|
||||
t = Template('This is a view that modifies the session.',
|
||||
name='Session Modifying View Template')
|
||||
c = Context()
|
||||
return HttpResponse(t.render(c))
|
||||
|
||||
def broken_view(request):
|
||||
"""A view which just raises an exception, simulating a broken view."""
|
||||
raise KeyError("Oops! Looks like you wrote some bad code.")
|
||||
|
||||
def mail_sending_view(request):
|
||||
mail.EmailMessage(
|
||||
"Test message",
|
||||
"This is a test email",
|
||||
"from@example.com",
|
||||
['first@example.com', 'second@example.com']).send()
|
||||
return HttpResponse("Mail sent")
|
||||
|
||||
def mass_mail_sending_view(request):
|
||||
m1 = mail.EmailMessage(
|
||||
'First Test message',
|
||||
'This is the first test email',
|
||||
'from@example.com',
|
||||
['first@example.com', 'second@example.com'])
|
||||
m2 = mail.EmailMessage(
|
||||
'Second Test message',
|
||||
'This is the second test email',
|
||||
'from@example.com',
|
||||
['second@example.com', 'third@example.com'])
|
||||
|
||||
c = mail.get_connection()
|
||||
c.send_messages([m1,m2])
|
||||
|
||||
return HttpResponse("Mail sent")
|
||||
Reference in New Issue
Block a user