aboutsummaryrefslogtreecommitdiffstats
path: root/examples/requestexample/views.py
blob: aa8a734f56adf2af477ff100b03dca2022a5a9bb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
from djangorestframework.compat import View
from django.http import HttpResponse
from django.core.urlresolvers import reverse

from djangorestframework.mixins import RequestMixin
from djangorestframework.views import View as DRFView
from djangorestframework import parsers


class RequestExampleView(DRFView):
    """
    A container view for request examples.
    """

    def get(self, request):
        return [{'name': 'request.DATA Example', 'url': reverse('request-content')},]


class MyBaseViewUsingEnhancedRequest(RequestMixin, View):
    """
    Base view enabling the usage of enhanced requests with user defined views.
    """

    parsers = parsers.DEFAULT_PARSERS

    def dispatch(self, request, *args, **kwargs):
        self.request = request
        request = self.get_request()
        return super(MyBaseViewUsingEnhancedRequest, self).dispatch(request, *args, **kwargs)


class EchoRequestContentView(MyBaseViewUsingEnhancedRequest):
    """
    A view that just reads the items in `request.DATA` and echoes them back.
    """

    def post(self, request, *args, **kwargs):
        return HttpResponse(("Found %s in request.DATA, content : %s" %
            (type(request.DATA), request.DATA)))

    def put(self, request, *args, **kwargs):
        return HttpResponse(("Found %s in request.DATA, content : %s" %
            (type(request.DATA), request.DATA)))


class MockView(DRFView):
    """
    A view that just acts as a proxy to call non-djangorestframework views, while still
    displaying the browsable API interface.
    """

    view_class = None

    def dispatch(self, request, *args, **kwargs):
        self.request = request
        if self.get_request().method in ['PUT', 'POST']:
            self.response = self.view_class.as_view()(request, *args, **kwargs)
        return super(MockView, self).dispatch(request, *args, **kwargs)

    def get(self, request, *args, **kwargs):
        return

    def put(self, request, *args, **kwargs):
        return self.response.content

    def post(self, request, *args, **kwargs):
        return self.response.content

    def __getattribute__(self, name):
        if name == '__name__':
            return self.view_class.__name__
        elif name == '__doc__':
            return self.view_class.__doc__
        else:
            return super(MockView, self).__getattribute__(name)