mirror of
https://github.com/django/django.git
synced 2024-11-19 07:54:07 +00:00
0d914d08a0
Lots of functions were moved. Use explicit imports in all cases to keey it easy to identify where the functions come from.
219 lines
7.9 KiB
Python
219 lines
7.9 KiB
Python
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")
|