成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Django Rest Framework 序列化關(guān)系模型

1fe1se / 1397人閱讀

摘要:結(jié)合官方分享一下框架中關(guān)于序列化關(guān)系模型的理解。而序列化關(guān)系模型則是對里數(shù)據(jù)模型中帶有關(guān)系的如和字段作序列化。提供了靈活的序列化關(guān)系模型,讓開發(fā)者可以自由定制序列化數(shù)據(jù)模型。例如,將主鍵序列化為緊湊的十六進制表示。

這兩天一直在學(xué)習(xí) Django Rest Framework 這個框架,這是一個非常流行的 REST API 框架,深度整合 Django。但與傳統(tǒng) MVC 模式的不同, Django REST Framework 在使用過程中,需要理解一些新的東西。結(jié)合官方 API 分享一下框架中關(guān)于序列化關(guān)系模型的理解。

序列化模型與序列化關(guān)系模型

序列化模型,顧名思義,即對 models 里的數(shù)據(jù)模型作序列化。而序列化關(guān)系模型則是對 models 里數(shù)據(jù)模型中帶有關(guān)系的如 ForeignKey, ManyToManyFieldOneToOneField 字段作序列化。Django Rest Framework 提供了靈活的序列化關(guān)系模型,讓開發(fā)者可以自由定制序列化數(shù)據(jù)模型。

序列化關(guān)系模型

根據(jù)官方的例子來看一下每一個關(guān)系模型的介紹。

數(shù)據(jù)模型如下:

class Album(models.Model):
    album_name = models.CharField(max_length=100)
    artist = models.CharField(max_length=100)

class Track(models.Model):
    album = models.ForeignKey(Album, related_name="tracks", on_delete=models.CASCADE)
    order = models.IntegerField()
    title = models.CharField(max_length=100)
    duration = models.IntegerField()

    class Meta:
        unique_together = ("album", "order")
        ordering = ["order"]

    def __unicode__(self):
        return "%d: %s" % (self.order, self.title)
StringRelatedField

使用 StringRelatedField 將返回一個對應(yīng)關(guān)系 model 的 __unicode__() 方法的字符串。

這個字段是只讀的。

參數(shù):

many 如果應(yīng)用于多對多關(guān)系,則應(yīng)將此參數(shù)設(shè)置為 True

序列化模型如下

class AlbumSerializer(serializers.ModelSerializer):
    tracks = serializers.StringRelatedField(many=True)

    class Meta:
        model = Album
        fields = ("album_name", "artist", "tracks")

序列化結(jié)果如下:

{
    "album_name": "Things We Lost In The Fire",
    "artist": "Low",
    "tracks": [
        "1: Sunflower",
        "2: Whitetail",
        "3: Dinosaur Act",
        ...
    ]
}
PrimaryKeyRelatedField

使用 PrimaryKeyRelatedField 將返回一個對應(yīng)關(guān)系 model 的主鍵。

參數(shù):

queryset 用于在驗證字段輸入時模型實例查找。 關(guān)系必須明確設(shè)置 queryset,或設(shè)置 read_only = True

many 如果是對應(yīng)多個的關(guān)系,就設(shè)置為 True

allow_null 如果設(shè)置為 True,則該字段將接受 None 的值或為空的關(guān)系的空字符串。默認(rèn)為 False

pk_field 設(shè)置為一個字段以控制主鍵值的序列化/反序列化。例如,pk_field = UUIDField(format ="hex") 將UUID主鍵序列化為緊湊的十六進制表示。

序列化模型如下

class AlbumSerializer(serializers.ModelSerializer):
    tracks = serializers.PrimaryKeyRelatedField(many=True, read_only=True)

    class Meta:
        model = Album
        fields = ("album_name", "artist", "tracks")

序列化結(jié)果如下:

{
    "album_name": "Undun",
    "artist": "The Roots",
    "tracks": [
        89,
        90,
        91,
        ...
    ]
}
HyperlinkedRelatedField

使用 HyperlinkedRelatedField 將返回一個超鏈接,該鏈接指向?qū)?yīng)關(guān)系 model 的詳細(xì)數(shù)據(jù),view-name 是必選參數(shù),為對應(yīng)的視圖生成超鏈接。

參數(shù):

view_name 用作關(guān)系目標(biāo)的視圖名稱。如果使用的是標(biāo)準(zhǔn)路由器類,那么它的格式為 -detail 的字符串

queryset 驗證字段輸入時用于模型實例查詢的查詢器。關(guān)系必須明確設(shè)置 queryset,或設(shè)置 read_only = True

many 如果應(yīng)用于多對多關(guān)系,則應(yīng)將此參數(shù)設(shè)置為 True

allow_null 如果設(shè)置為 True,則該字段將接受 None 的值或為空的關(guān)系的空字符串。默認(rèn)為 False

lookup_field 應(yīng)該用于查找的目標(biāo)上的字段。應(yīng)該對應(yīng)于引用視圖上的 URL 關(guān)鍵字參數(shù)。默認(rèn)值為 pk

lookup_url_kwarg 與查找字段對應(yīng)的 URL conf 中定義的關(guān)鍵字參數(shù)的名稱。默認(rèn)使用與 lookup_field 相同的值

format 如果使用 format 后綴,超鏈接字段將對目標(biāo)使用相同的 format 后綴,除非使用 format 參數(shù)進行覆蓋。

序列化模型如下

class AlbumSerializer(serializers.ModelSerializer):
    tracks = serializers.HyperlinkedRelatedField(
        many=True,
        read_only=True,
        view_name="track-detail"
    )

    class Meta:
        model = Album
        fields = ("album_name", "artist", "tracks")

序列化結(jié)果如下:

{
    "album_name": "Graceland",
    "artist": "Paul Simon",
    "tracks": [
        "http://www.example.com/api/tracks/45/",
        "http://www.example.com/api/tracks/46/",
        "http://www.example.com/api/tracks/47/",
        ...
    ]
}
SlugRelatedField

使用 SlugRelatedField 將返回一個指定對應(yīng)關(guān)系 model 中的字段,需要擦參數(shù) slug_field 中指定字段名稱。

參數(shù):

slug_field 應(yīng)該用于表示目標(biāo)的字段。這應(yīng)該是唯一標(biāo)識任何給定實例的字段。例如 username 。這是必選參數(shù)

queryset 驗證字段輸入時用于模型實例查詢的查詢器。 關(guān)系必須明確設(shè)置 queryset,或設(shè)置 read_only = True

many 如果應(yīng)用于多對多關(guān)系,則應(yīng)將此參數(shù)設(shè)置為 True

allow_null 如果設(shè)置為 True,則該字段將接受 None 的值或為空的關(guān)系的空字符串。默認(rèn)為 False

序列化模型如下

class AlbumSerializer(serializers.ModelSerializer):
    tracks = serializers.SlugRelatedField(
        many=True,
        read_only=True,
        slug_field="title"
     )

    class Meta:
        model = Album
        fields = ("album_name", "artist", "tracks")

序列化結(jié)果如下:

{
    "album_name": "Dear John",
    "artist": "Loney Dear",
    "tracks": [
        "Airport Surroundings",
        "Everything Turns to You",
        "I Was Only Going Out",
        ...
    ]
}
HyperlinkedIdentityField

使用 HyperlinkedIdentityField 將返回指定 view-name 的超鏈接的字段。

參數(shù):

view_name 應(yīng)該用作關(guān)系目標(biāo)的視圖名稱。如果您使用的是標(biāo)準(zhǔn)路由器類,則它將是格式為 -detail 的字符串。必選參數(shù)

lookup_field 應(yīng)該用于查找的目標(biāo)上的字段。應(yīng)該對應(yīng)于引用視圖上的 URL 關(guān)鍵字參數(shù)。默認(rèn)值為 pk

lookup_url_kwarg 與查找字段對應(yīng)的 URL conf 中定義的關(guān)鍵字參數(shù)的名稱。默認(rèn)使用與 lookup_field 相同的值

format 如果使用 format 后綴,超鏈接字段將對目標(biāo)使用相同的 format 后綴,除非使用 format 參數(shù)進行覆蓋

序列化模型如下

class AlbumSerializer(serializers.HyperlinkedModelSerializer):
    track_listing = serializers.HyperlinkedIdentityField(view_name="track-list")

    class Meta:
        model = Album
        fields = ("album_name", "artist", "track_listing")

序列化結(jié)果如下:

{
    "album_name": "The Eraser",
    "artist": "Thom Yorke",
    "track_listing": "http://www.example.com/api/track_list/12/",
}
嵌套序列化關(guān)系模型

在序列化模型中指定嵌套序列化關(guān)系模型將返回一個該嵌套序列化關(guān)系模型對應(yīng)的數(shù)據(jù)模型中序列化的數(shù)據(jù)。
讀起來有些拗口,看例子吧。

參數(shù):

many 如果應(yīng)用于多對多關(guān)系,則應(yīng)將此參數(shù)設(shè)置為 True

序列化模型如下

class TrackSerializer(serializers.ModelSerializer):
    class Meta:
        model = Track
        fields = ("order", "title", "duration")

class AlbumSerializer(serializers.ModelSerializer):
    tracks = TrackSerializer(many=True, read_only=True)

    class Meta:
        model = Album
        fields = ("album_name", "artist", "tracks")

序列化結(jié)果如下:

 {
    "album_name": "The Grey Album",
    "artist": "Danger Mouse",
    "tracks": [
        {"order": 1, "title": "Public Service Announcement", "duration": 245},
        {"order": 2, "title": "What More Can I Say", "duration": 264},
        {"order": 3, "title": "Encore", "duration": 159},
    ],
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/45446.html

相關(guān)文章

  • Django Rest Framework 列化關(guān)系模型

    摘要:結(jié)合官方分享一下框架中關(guān)于序列化關(guān)系模型的理解。而序列化關(guān)系模型則是對里數(shù)據(jù)模型中帶有關(guān)系的如和字段作序列化。提供了靈活的序列化關(guān)系模型,讓開發(fā)者可以自由定制序列化數(shù)據(jù)模型。例如,將主鍵序列化為緊湊的十六進制表示。 這兩天一直在學(xué)習(xí) Django Rest Framework 這個框架,這是一個非常流行的 REST API 框架,深度整合 Django。但與傳統(tǒng) MVC 模式的不同, ...

    BlackHole1 評論0 收藏0
  • Django Rest Framework 列化關(guān)系模型

    摘要:結(jié)合官方分享一下框架中關(guān)于序列化關(guān)系模型的理解。而序列化關(guān)系模型則是對里數(shù)據(jù)模型中帶有關(guān)系的如和字段作序列化。提供了靈活的序列化關(guān)系模型,讓開發(fā)者可以自由定制序列化數(shù)據(jù)模型。例如,將主鍵序列化為緊湊的十六進制表示。 這兩天一直在學(xué)習(xí) Django Rest Framework 這個框架,這是一個非常流行的 REST API 框架,深度整合 Django。但與傳統(tǒng) MVC 模式的不同, ...

    nihao 評論0 收藏0
  • Django REST FrameWork中文教程4:驗證和權(quán)限

    摘要:未經(jīng)身份驗證的請求應(yīng)具有完全只讀訪問權(quán)限。其中一個字段將用于表示創(chuàng)建代碼段的用戶。唯一的限制是所包含的必須使用命名空間。中文教程序列化中文教程請求和響應(yīng)中文教程基于類的視圖中文教程驗證和權(quán)限中文教程關(guān)系和超鏈接中文教程中文教程模式和客戶端庫 目前,我們的API對誰可以編輯或刪除代碼段沒有任何限制。我們想要一些更高級的行為,以確保: 代碼段始終與創(chuàng)建者相關(guān)聯(lián)。 只有身份驗證的用戶可以創(chuàng)建...

    luodongseu 評論0 收藏0
  • Django REST FrameWork中文教程4:驗證和權(quán)限

    摘要:未經(jīng)身份驗證的請求應(yīng)具有完全只讀訪問權(quán)限。其中一個字段將用于表示創(chuàng)建代碼段的用戶。唯一的限制是所包含的必須使用命名空間。中文教程序列化中文教程請求和響應(yīng)中文教程基于類的視圖中文教程驗證和權(quán)限中文教程關(guān)系和超鏈接中文教程中文教程模式和客戶端庫 目前,我們的API對誰可以編輯或刪除代碼段沒有任何限制。我們想要一些更高級的行為,以確保: 代碼段始終與創(chuàng)建者相關(guān)聯(lián)。 只有身份驗證的用戶可以創(chuàng)建...

    _ang 評論0 收藏0
  • Django REST FrameWork中文教程4:驗證和權(quán)限

    摘要:未經(jīng)身份驗證的請求應(yīng)具有完全只讀訪問權(quán)限。其中一個字段將用于表示創(chuàng)建代碼段的用戶。唯一的限制是所包含的必須使用命名空間。中文教程序列化中文教程請求和響應(yīng)中文教程基于類的視圖中文教程驗證和權(quán)限中文教程關(guān)系和超鏈接中文教程中文教程模式和客戶端庫 目前,我們的API對誰可以編輯或刪除代碼段沒有任何限制。我們想要一些更高級的行為,以確保: 代碼段始終與創(chuàng)建者相關(guān)聯(lián)。 只有身份驗證的用戶可以創(chuàng)建...

    Hydrogen 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<