Home > Mobile >  Django rest api csv to json
Django rest api csv to json

Time:12-22

I would like to create a django rest api that receives a csv file and then response the file in a json format. How do I achieve this without using models and anything related with databases? I don't want to use a database because it's assumed that the csv files will have different structure every time

This is my first django project and I've seen lots of tutorials, even I did the first tutorial from django website but I can't understand how to do this task without the database. Thanks!

CodePudding user response:

since you have not tried anything on your own Here is how you can do it

views.py

 from rest_franework.generics import CreateAPIView
    class ReadCSVView(CreateAPIView):
        # permission_classes = [IsAuthenticated]
        serializer_class = ReadCSVSerializer
        queryset = ''
    
        def perform_create(self, serializer):
            file = serializer.validated_data['file']
            decoded_file = file.read().decode()
            io_string = io.StringIO(decoded_file)
            reader = csv.reader(io_string)
            next(reader) # incase you want to skip first row else remove this 
            return reader
    
        def create(self, request, *args, **kwargs):
            serializer = self.get_serializer(data=request.data)
            serializer.is_valid(raise_exception=True)
            final_data = []
            for row in self.perform_create(serializer):
                    if row[0]=="jack":
                          #do your logic here
                        final_data.append(row)
            return Response(final_data, status=status.HTTP_201_CREATED)

just create one serializers to read csv. serializers.py

from rest_framework import serializers
class ReadCSVSerializer(serializers.Serializer):
    file = serializers.FileField()

now go to your urls.py and call the view class this way

urlpatterns = [
    path("read-csv",views.ReadCSVView.as_view(),name="csv")]

hope this clarifies your doubt

  • Related