HyperlinkedIdentityField

HyperlinkedIdentityField

1.简介

其实就是创建一个链接,把查询到对象放到链接上,点链接可以查看。实际上用的很少。

2.

views代码

查找的是一个对象的所有数据,link只是放在这个对象其中一个字段上的数据。

from django.shortcuts import render,HttpResponse,redirect,reverse
from django.http import JsonResponse
from app01 import models
from rest_framework.views import APIView
from app01 import MySer

# Create your views here.

class Book(APIView):
    def get(self,request,*args,**kwargs):
        books=models.Book.objects.all()
        #这里的context={'request':request}传过去的request的变量是要拿到前面的链接,即ip或域名,不然无法生成新的链接
        book_ser=MySer.BookSerializer(books,many=True,context={'request':request})
        #返回的必须是book_ser.data
        return JsonResponse(book_ser.data,safe=False)

class Publish(APIView):
    def get(self,request,pk,*args,**kwargs):
        publish=models.Publish.objects.filter(pk=pk).first()
        publish_ser=MySer.PublishSerializer(publish,many=False)
        return JsonResponse(publish_ser.data,safe=False)

自定义myser代码

lookup_field指的是根据哪个字段生成链接,lookup_url——kwarg指的是有名分组的分组名

from app01 import models
from rest_framework.serializers import Serializer, ModelSerializer
from rest_framework import serializers
from rest_framework.exceptions import ValidationError

class AuthorSerializer(serializers.Serializer):
    name = serializers.CharField()
    age = serializers.CharField()

class BookSerializer(serializers.Serializer):
    name = serializers.CharField()
    # view_name指的是配置的路由解析,lookup_field指的是查找的字段,lookup_url_kwarg指的是路由输入的有名分组
    publish = serializers.HyperlinkedIdentityField(view_name='sss', lookup_field='publish_id',lookup_url_kwarg='pk')

class PublishSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Publish
        fields = '__all__'

# class BookSerializer(serializers.ModelSerializer):
#     class Meta:
#         model = models.Book
#         fields = '__all__'
#
#     #这里设置的校验,是对方提交过来时的校验
#     name = serializers.CharField(min_length=2, max_length=10,
#                                  error_messages={'min_length': '最短为2', 'max_length': '最长为10', 'required': '这个必须填'})
05-11 19:59