0

I am used to using flask for apis and Django for databases and I am trying to learn the DjangoRestAPI. I followed the official Quickstart and another tutorial from medium and did a lot of research but I still struggle to understand how to implement my own function (eg: Doing some calculations or making a request to the Twilio api to send a message after receiving an api request) in a ModelViewSet. I have read that APIView can also be another option but it will making accessing the database quite difficult? When I run a print function in a ModelViewSet class in views.py, or a @action function, it prints but only once at the start of the programme when the server is starting. This is my version of the code in Flask and what I have tried in Django.

Which class should I inherit (APIView or Viewset or ModelViewSet and where can I look for more information about this?

Thank you very much for your kind help in advance: - please note that the flask implementation is a get request

@app.route('/api/upload/<uuid>/<major>/<minor>/<rssi>',methods=['GET'])
def beacon_info_upload(uuid,major,minor,rssi):
    if 'uuid' in request.args:
        uuid = str(request.args['uuid'])
    if 'major' in request.args:
        major = str(request.args['major'])
    if 'minor' in request.args:
        minor = str(request.args['minor'])
    if 'rssi' in request.args:
        rssi = str(request.args['rssi'])
    qualify = send_twilio_message(uuid,major,minor,rssi)
    return jsonify(uuid,major,minor,qualify)

Attempt in Django (views.py)

class beacon_occuranceViewSet(viewsets.ModelViewSet):
    queryset = beacon_occurance.objects.all().order_by('from_location')
    serializer_class = beacon_occuranceSerializer
    print("event occ beacon occ views.py L32 success experiment") #only prints once at the beginning

    @action(detail=True, methods=['post'])
    def register(self, request, pk=None):
        print("hello!!!!! L38") #only prints once at the beginning
        beacon = self.get_object()
        print(beacon)

class beacon_occuranceSerializer(serializers.HyperlinkedModelSerializer):
    print("hello") #also only prints once when booting the server
    class Meta:
        model = beacon_occurance
        fields = ('from_location','uuid','major','minor','rssi','time')

deceze
  • 491,798
  • 79
  • 706
  • 853

1 Answers1

0

Solved - use

def create(self, request):
     #do what you want - do access data- do request.data (its a dictionary)
     return super().create(request)

refer to Custom function which performs create and update on DRF modelViewSet