[英]Consuming Django Rest Api in the same project
我對django的rest框架還很陌生,我使用此處的官方教程構建了我的第一個示例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定義。 我想創建另一個應用程序以顯示數據,例如所有學生的列表以及有關他們的詳細信息等。
您將必須在使用方視圖中命中端點,最簡單的方法是使用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作為Python字典獲取JSON響應。 如果您僅使用./manage.py runserver
URL為:
http:localhost:8000/your-endpoint
要么
http://192.168.0.1:8000/your-endpoint
如果您完全在Django中工作,則使用API的這種方式有些多余。 在這些情況下,使用ORM通常會容易得多。 但是,如果您要使該API供外界使用(公開或通過API密鑰),則此方法很有意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.