首页 文章

在同一个项目中使用Django Rest Api

提问于
浏览
1

我是'm pretty new to django'的休息框架,我使用官方教程here构建了我的第一个示例api . 但是我不知道如何使用这个api 's data into another app in the same project such it'的数据可以渲染成HTML .

假设我在学校为学生(及其详细信息)创建了一个API students . 现在,我如何在同一个项目中使用此api来显示学校中的学生人数及其详细信息 .

大多数在线教程或解释都是针对第三方API的,我无法弄清楚如何继续 . 提前致谢 .

models.py

class Test(models.Model):
    date = models.DateTimeField(auto_now_add=True)
    test_name = models.CharField(max_length=200,default='simple blood test',blank=False)
    subject = models.CharField(max_length=100,default='')

def __str__(self):
    return self.test_name

class Person(models.Model):
    tests = models.ManyToManyField(Test)
    title = models.CharField(max_length=3,default="mr",blank=False)
    name = models.CharField(max_length=50,default='',blank=False)

def __str__(self):
    return self.name

views.py

class PersonList(generics.ListCreateAPIView):
    queryset = Person.objects.all()
    serializer_class = PersonSerializer

    def perform_create(self, serializer):
        serializer.save(owner=self.request.user)


class PersonDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Person.objects.all()
    serializer_class = PersonSerializer

serializers.py

class TestSerializer(serializers.ModelSerializer):
    class Meta:
        model = Test
        fields = ('test_name','subject')

class PersonSerializer(serializers.HyperlinkedModelSerializer):
    owner = serializers.ReadOnlyField(source='owner.username')
    tests = TestSerializer(many=True, read_only=True)
    class Meta:
        model = Person
        fields = ('url','id','name')

这是我的API定义 . 我想创建另一个应用程序来显示数据,如所有学生的列表和有关它们的详细信息等 .

1 回答

  • 1

    您必须在消费视图中点击 endpoints ,最简单的方法是使用 requests 库 . 首先安装库:

    pip install requests
    

    然后在您的消费视图中使用它:

    def consumer_view(request):
        response = requests.get('http://your-url.com/your-endpoint')
        # do what you need to do here
    

    您可以使用 response.json() 从您的API获取JSON响应作为Python字典 . 如果您只是使用 ./manage.py runserver ,您的网址将是:

    http:localhost:8000/your-endpoint
    

    要么

    http://192.168.0.1:8000/your-endpoint
    

    如果你在Django中完全工作,这种使用API的方式有点多余 . 在这些情况下使用ORM通常要容易得多 . 但是,如果您要使API可供外部使用(公开或通过API密钥),那么这种方法是有道理的 .

相关问题