Shaswat Kumar
Shaswat Kumar

Reputation: 11

Retrieve data from Django API and store it in database

I created an API with django

What I want to do is to fetch data from my django API and store it in my database.

serializers.py

 from rest_framework import serializers, generics
 from Usersapi.models import Userdata

 class UserSerializer(serializers.HyperlinkedModelSerializer):
     class Meta:
         model = Userdata
         fields = '__all__'

viewsets.py

 from Usersapi.models import Userdata
 from .serializers import UserSerializer
 from rest_framework import viewsets

 class UserViewSet(viewsets.ModelViewSet):
     queryset = Userdata.objects.all()
     serializer_class = UserSerializer

main--> urls.py

 from django.contrib import admin
 from django.urls import include, path
 from rest_framework.urlpatterns import format_suffix_patterns
 from .router import router


 urlpatterns = [
      path('admin/', admin.site.urls),
      # path('',include('Usersapi.urls')),
      path('client/',include('clientside.urls')),
      path('api/', include(router.urls)) 
      ] 

This is where I am trying to retrieve data from API clientside--> views.py

 from django.shortcuts import render
 import coreapi
 import json
 from django.views import generic
 import io
 from rest_framework.parsers import JSONParser   

 def home(request):
     client = coreapi.Client()
     response = client.get('http://127.0.0.1:8000/api/Usersapi/1/')

     stream = io.BytesIO(response)
     data = JSONParser().parse(stream)

     name = data.get("name")
     age = data.get("age")
     gender = data.get("gender")
     user = UserReceived.objects.create( name = name, age= age, gender = gender)
     user.save()


     return render(request, 'books.html')

This code is not working. How do I retrieve the data from ('http://127.0.0.1:8000/api/Usersapi/1/') and store it in my models.py i.e database

clientside --> models.py

 from django.db import models

 class UserReceived(models.Model):

       name = models.CharField(max_length=100)
       age = models.PositiveIntegerField()
       gender = models.CharField(max_length=50)

Upvotes: 0

Views: 4321

Answers (1)

Kound
Kound

Reputation: 2521

Your problem is that the corapi client already returns an ordered dict.

This will work:

def home(request):
    client = coreapi.Client()
    data = client.get('http://127.0.0.1:8000/api/usersapi/1/')

    name = data.get("name")
    age = data.get("age")
    gender = data.get("gender")
    user = UserReceived.objects.create(name=name, age=age, gender=gender)
    user.save()

    return HttpResponse(f"OKAY, got and saved user {name}")

I created a minimal working example here: https://github.com/CarliJoy/MWE_SO_59668515

Upvotes: 1

Related Questions