我们的API中的关系是用主键表示的。我们将通过使用超链接来提高我们API的内部联系。
上一章,介绍了权限相关操作,下面内容在上一章基础上继续
上一章地址:https://blog.csdn.net/qq_41590764/article/details/108850210
开始:
第一步:增加model模型,并与User绑定一对多关系
即:每个用户可以有多个sensor模型,一个sensor模型只有一个用户
from django.db import models
class User(models.Model):
User_id = models.IntegerField()
name = models.CharField(max_length=32)
age = models.IntegerField()
permission = models.ForeignKey('auth.User', on_delete=models.CASCADE)
def __str__(self):
return self.name
class Sensor(models.Model):
sensor_id = models.IntegerField()
name = models.CharField(max_length=32)
value = models.IntegerField()
my_sensor = models.ForeignKey('User', on_delete=models.CASCADE)
def __str__(self):
return self.name
迁移模型:
python manage.py makemigrations
python manage.py migrate
第二步:增加sensor的序列化器
class SensorSer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Sensor
fields = '__all__'
注意,这里基础的是 HyperlinkedModelSerializer
第三步:增加sensor的视图
class SensorList(generics.ListCreateAPIView):
queryset = Sensor.objects.all()
serializer_class = SensorSer
permission_classes = (permissions.IsAuthenticated, )
class SensorDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Sensor.objects.all()
serializer_class = SensorSer
permission_classes = (permissions.IsAuthenticated, )
这里和之前的大致相似
第四步:在原来视图函数中增加“根路径”
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework.reverse import reverse
@api_view(['GET'])
def api_root(request, format=None):
return Response({
'users': reverse('user-list', request=request, format=format),
'sensors': reverse('sensor-list', request=request, format=format)
})
第五步:配置url
urlpatterns = [
url(r'^$', api_root),
url(r'^userlist/', UserList.as_view(), name='user-list'),
url(r'^userdetail/(?P<pk>[0-9]+)/$', UserDetail.as_view(), name='user-detail'),
url(r'^sensorlist/', SensorList.as_view(), name='sensor-list'),
url(r'^sensordetail/(?P<pk>[0-9]+)/$', SensorDetail.as_view(), name='sensor-detail')
]
因为在序列化器重有反向解析,所以要加name字段
第六步:启动项目
根路径:
user路径:
sensor路径: