【问题标题】:Consuming Django Rest Api in the same project在同一个项目中使用 Django Rest Api
【发布时间】:2016-03-20 14:26:58
【问题描述】:

我对 django 的 rest 框架还很陌生,我使用官方教程 here 构建了我的第一个示例 API。但我不知道如何将此 API 的数据使用到同一项目中的另一个应用程序中,以便可以将其数据呈现​​为 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 定义。我想创建另一个应用程序来显示数据,例如所有学生的列表和他们的详细信息等。

【问题讨论】:

  • 您只需要使用url,如果您没有显示代码,或者具体问题我们无法帮助您

标签: python django api django-rest-framework


【解决方案1】:

您必须在消费视图中点击端点,最简单的方法是使用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 密钥),那么这种方法是有意义的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 2019-04-20
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多