drf-tracking icon indicating copy to clipboard operation
drf-tracking copied to clipboard

how to use it function base view

Open pawanvirsingh opened this issue 8 years ago • 6 comments

how to use it function base view

pawanvirsingh avatar Sep 11 '17 09:09 pawanvirsingh

Hello @pawanvirsingh, can you be more precise in your question ? maybe give some code exemple ? Thanks

triat avatar Sep 12 '17 11:09 triat

@triat yes

views.py

from rest_framework import generics from rest_framework.response import Response from rest_framework_tracking.mixins import LoggingMixin

class LoggingView(LoggingMixin, generics.GenericAPIView): def get(self, request): return Response('with logging')

this is for the class base view

but if wanted it to use in function base view how could I use this. like this module

@api_view(['GET']) @permission_classes((IsAuthenticated, )) def bankAccountDataAll(request): if request.method=='GET': try: userid = request.user.id driver_id = userid_to_driverid(userid) driver_bank_data = driver_bank_details.objects.filter(driver = driver_id) driver_bank_serializer = bankAccountSerializer(driver_bank_data, many = True) return Response({"success": True, "data": driver_bank_serializer.data}) except Exception as e: print e return Response({"success": False, "data": "no data found"})

pawanvirsingh avatar Sep 12 '17 14:09 pawanvirsingh

I'm not sure about what's you're trying to do there. What's your looking for is a middleware that log stuff, it's not the purpose of DRF-tracking I think.

triat avatar Sep 22 '17 14:09 triat

hey @triat I am saying that we are using drf tracking in class base view (Django ) can we also use it in function base view -- like any other decorator.

pawanvirsingh avatar Sep 22 '17 18:09 pawanvirsingh

I'm not sure, this is really specific to DRF. You can try but again, that was not the main purpose there

triat avatar Sep 23 '17 05:09 triat

This is solutions for your task, but I prefer work with class views 😉 it is possible update to work with rewrite should_log and handle_log custom methods 😀

from django.utils import six
from rest_framework_tracking.mixins import LoggingMixin

def tracking_api(logging_methods=[], sensitive_fields={}):
    """
    This decorator must by install before api_view decorator. Eg:

    @tracking_api(['GET', 'POST'])
    @api_view(['GET'])
    def view_packs(request):
        ...
    """
    http_logging_methods = ['GET'] if (logging_methods is None) else logging_methods

    def decorator(func):

        TrackingWrappedAPIView = type(
            six.PY3 and 'TrackingWrappedAPIView' or b'TrackingWrappedAPIView',
            (LoggingMixin, func.view_class),
            {'__doc__': func.__doc__})

        TrackingWrappedAPIView.logging_methods = http_logging_methods

        if sensitive_fields:
            TrackingWrappedAPIView.sensitive_fields = sensitive_fields

        return TrackingWrappedAPIView.as_view()
    return decorator

witold-gren avatar Mar 19 '18 14:03 witold-gren