forked from openhealthcare/opal
/
views.py
47 lines (39 loc) · 1.36 KB
/
views.py
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
"""
Re-usable view components
"""
import functools
import json
from django.http import HttpResponse
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from django.core.serializers.json import DjangoJSONEncoder
from rest_framework import mixins, viewsets
class LoginRequiredMixin(object):
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(LoginRequiredMixin, self).dispatch(*args, **kwargs)
def _get_request_data(request):
data = request.read()
return json.loads(data)
def _build_json_response(data, status_code=200):
response = HttpResponse()
response['Content-Type'] = 'application/json'
response.content = json.dumps(data, cls=DjangoJSONEncoder)
# response.content = '<html><body>'+json.dumps(data, cls=DjangoJSONEncoder)+'</body></html>'
response.status_code = status_code
return response
def with_no_caching(view):
@functools.wraps(view)
def no_cache(*args, **kw):
response = view(*args, **kw)
response['Cache-Control'] = 'no-cache'
response['Pragma'] = 'no-cache'
response['Expires'] = '-1'
return response
return no_cache
class ModelViewSet(
mixins.CreateModelMixin,
mixins.RetrieveModelMixin,
mixins.ListModelMixin,
viewsets.GenericViewSet):
pass